Python 三个变量

如果一个图表需要展示三个变量,那么将会有以下四种情况:

(1) 三个变量都是数值变量
(2)两个是数值变量,一个是分类变量
(3)一个是数值变量,两个是分类变量
(4)三个都是分类变量

如果三个变量中至少有两个是数值型的,用散点图画出数值变量,然后使用非位置编码的方式可视化第三个变量。非位置的编码方式主要有三种:形状,大小,颜色

1、形状
对于无序分类变量,形状是一个很好的编码方式。每一个类别,可以使用一种形状。

cat_markers = [['A', 'o'],
               ['B', 's']]

for cat, marker in cat_markers:
    df_cat = df[df['cat_var1'] == cat]
    plt.scatter(data = df_cat, x = 'num_var1', y = 'num_var2', marker = marker)
plt.legend(['A','B'])

“o” 这个字符串将类别 A 设置为圆圈形状,而 “s” 则将类别 B 设置为正方形。legend 这个函数负责給图表添加图例,添加的图例顺序与 scatter 调用顺序一致。它的参数是每个类别的名称标签

2、大小编码
适合数值变量,数值大小和标记点的面积大小成比例,这个是 scatter 里的参数 “s” 自带的功能(如果是 regplot 函数,你需要使用 “scatter_kws” 参数,并将 “s” 作为字典传入。)

plt.scatter(data = df, x = 'num_var1', y = 'num_var2', s = 'num_var3')

# dummy series for adding legend
sizes = [20, 35, 50]
base_color = sb.color_palette()[0]
legend_obj = []
for s in sizes:
    legend_obj.append(plt.scatter([], [], s = s, color = base_color))
plt.legend(legend_obj, sizes)

3、颜色

(1)分类变量

g = sb.FacetGrid(data = df, hue = 'cat_var1', size = 5)
g.map(plt.scatter, 'num_var1', 'num_var2')
g.add_legend()

在这里插入图片描述

(2)数值

plt.scatter(data = df, x = 'num_var1', y = 'num_var2', c = 'num_var3')
plt.colorbar()

在这里插入图片描述

3、调色板

可以根据不同的数据类型,选用不同的调色板。调色板类型主要有三种类型:分类的(qualitative 或 categorical),有序的(sequential)和发散的(diverging)。

(1)分类 调色板针对无序分类变量。

sb.palplot(sb.color_palette(n_colors=9))

在这里插入图片描述

(2)对有序变量和数值变量, 应该采用有序调色板和发散调色板。在有序调色板中,颜色应该具有一定的顺序。通常,这会通过单个或小范围几个色调的明暗程度来表示,其中浅色表示低值,深色表示高值。有序调色板的默认调色板为 “viridis”,它则是用深色表示低值,浅色表示高值。

sb.palplot(sb.color_palette('viridis', 9))

在这里插入图片描述
(3)但如果存在一个有意义的零点或者存在一个中心值,那你应该考虑使用发散型调色板。发散调色板可以由两个有序调色板头尾拼接得到,中间的颜色为两个调色板的共同颜色(通常是白色或者灰色)。其中一个色调代表大于中心点的数据,另一个色调代表小于中心点的数据。

sb.palplot(sb.color_palette('vlag', 9))

在这里插入图片描述
4、Seaborn 中的调色板

分类(0.8 版本 6 个颜色,0.9 版本 10 个颜色) :‘deep’, ‘pastel’, ‘dark’, ‘muted’, ‘bright’, ‘colorblind’
有序: ‘rocket’(白-橙-红-紫-黑),‘mako’(薄荷绿-绿-蓝-紫-黑)
发散: ‘vlag’(蓝-白-红),‘icefire’(蓝-黑-橙)

对所有这些字符串,如果加上 ‘_r’ 就会将调色板的颜色颠倒,有些情况下还是有用的。

调色板可以在 FacetGrid 函数中通过 “palette” 参数设置, 在 scatter 函数中则是 “cmap” 参数。

g = sb.FacetGrid(data = df, hue = 'cat_var1', size = 5,palette = 'colorblind')
g.map(plt.scatter, 'num_var1', 'num_var2')
g.add_legend()
plt.scatter(data = df, x = 'num_var1', y = 'num_var2', c = 'num_var3',cmap = 'mako_r')
plt.colorbar()
发布了185 篇原创文章 · 获赞 6 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/JackLi31742/article/details/104995885