10个数据可视化技巧,让你一看就懂( 二 )

 
设置标题
 
如果我们要将数据呈现给第三方,另一个基本但关键的要点是使用标题,它和之前的轴标记非常相似:
???????ax[0].title.set_text(‘This title has to be very clear and explicative’)ax[1].title.set_text(‘And this title has to explain what’s different in this chart’ 
给图表重点元素做注释
 
通常情况下,仅仅在图表的左右两侧使用刻度本身并不是很清楚 。在图上标注值对于解释图表非常有用 。
 
假设现在我们使用 subplots,我们有几个图表,其中一个是位于 ax[0] 位置的 seaborn 的 barplot 。在这种情况下,在条形图中每个条上获取注释的代码要复杂一些,但很容易实现:
???????for p in ax[0].patches:ax[0].annotate(“%.2f” % p.get_height(), (p.get_x() + p.get_width() / 2., p.get_height()),ha=’center’, va=’center’, fontsize=12, color=’white’, xytext=(0, -10), textcoords=’offset points’ 
对于图表中的每个「patch」或条形图,直到「ha」参数获取条形图的位置、高度和宽度为止,以便将值注释放在正确的位置 。以类似的方式,我们还可以指定注释的对齐方式、字体大小和颜色,而「xytext」参数指示我们是否要在某个 x 或 y 方向移动注释 。在上面的例子中,我们将在 y 轴上向下移动注释文本 。
 
使用不同颜色区分标签
 
在某些情况下,在一段时间或一系列的值中,我们可能测量了不同种类的物体 。例如,假设我们测量 6 个月以来狗和猫的体重 。在实验结束时,我们想画出每只动物的体重,分别用蓝色和红色区分猫和狗 。为此,在大多数传统绘图中,我们可以使用参数「hue」为元素提供颜色列表 。
 
举个例子:
???????weight = [5,4,8,2,6,2] month = [‘febrero’,’enero’,’abril’,’junio’,’marzo’,’mayo’] animal_type = [‘dog’,’cat’,’cat’,’dog’,’dog’,’dog’] hue = [‘blue’,’red’,’red’,’blue’,’blue’,’blue’] sns.scatterplot(x=month, y=weight, hue=hue); 

10个数据可视化技巧,让你一看就懂

文章插图
 
改变散点图中点的大小
 
使用上面的相同示例,我们还可以使用从 1 到 5 的刻度表示图表中动物的大小 。将此额外指标添加到绘图中的一个好选择是修改散点图的大小,通过「size」参数将大小指定给新的附加向量,并使用「size」调整它们之间的关系:
 
???????size = [2,3,5,1,4,1]sns.scatterplot(x=month, y=weight, hue=hue, size=size, sizes= (50,300)); 
10个数据可视化技巧,让你一看就懂

文章插图
 
 
顺便说一下,如果如上图所示,图例使绘图更难阅读,你可以将「legend」参数设置为 false 。
 
在数据中包含一行以显示阈值
 
在现实生活中的许多情况下,数据高于或低于某个阈值可能是问题提示信号或错误警告 。如果要在绘图中清楚地显示,可以使用以下命令添加一行:
 ax[0].axvline(32,0,c='r') 
加在哪里?
ax[0] 将是我们要在其中插入行的图表
32 将是绘制线的值
c = 'r' 表示图表将是红色的
 
如果我们使用的是 subplots,那么将 axvline 添加到相应的 axe 就很简单,如上面的示例所示 。但是,如果不使用 subplots,则应执行以下操作:
 
???????g=sns.scatterplot(x=month,y=weight,hue=hue,legend=false)g.axvline(2,c='r')plt.show() 
10个数据可视化技巧,让你一看就懂

文章插图
 
 
多Y轴绘图
 
这可能是最简单,但也是最有用的技巧之一 。
有时我们只需要在图表中添加更多信息,除了在绘图的右 y 轴上添加新的度量之外,没有其他方法可以绕过它:
 
ax2=ax[0].twinx() 
现在可以添加任何要将「ax」参数指向「ax2」的图表
 sns.lineplot(x=month, y=average_animal_weight, ax=ax2 
请注意,这个例子再次假设你使用的是 subplots 。如果没有,你应该遵循与前一点相同的逻辑:
 
??????【10个数据可视化技巧,让你一看就懂】g = sns.scatterplot(x=month, y=weight, hue=hue, legend=False)g.axvline(2,c=’r’)ax2 = g.twinx()sns.lineplot(x=month, y=average_animal_weight, ax=ax2, c=’y’)plt.show()


推荐阅读