在matplotlib中,scatter方法用于绘制散点图,与plot方法不同之处在于,scatter主要用于绘制点的颜色和大小呈现梯度变化的散点图,也就是我们常说的气泡图。基本用法如下
plt.scatter(x= np.random.randn(10), y=np.random.randn(10),s=40 * np.arange(10),c=np.random.randn(10))
输出结果如下
x和y参数指定x轴和y轴坐标,s参数指定mark size, 即点的大小,c参数指定color,即颜色。scatter会根据数值自动进行映射,如果不指定大小和颜色,scatter和普通的plot方法绘制的效果一样,以下两种写法的可视化的效果是等价的
plt.scatter(x=[1, 2, 3, 4],y=[1, 2, 3, 4])
plt.plot([1, 2, 3, 4],[1, 2, 3, 4],'o')
输出结果都是如下所示的散点图
简单的散点图,用plot方法绘制速度会更快,scatter方法则慢一点,所以只有当颜色和大小超过了一定数量时,才推荐使用scatter方法。
scatter函数本身的用法比较简单,难点在于其图例的处理上。scatter函数的返回值为一个PathCollections对象,通过其legend_elements方法,可以获得绘制图例所需的信息,常见的几种图例绘制方法如下
1. 颜色图例
legend_elements方法默认返回的就是colors的信息,可以直接用于绘制图例,代码如下
scatter = plt.scatter(x= np.random.randn(10), y=np.random.randn(10),s=40 * np.arange(10),c=np.random.choice(np.arange(4), 10))
plt.legend(*scatter.legend_elements())
注意,其中*号是必须的,上述代码会将所有颜色都显示在图例上,输出结果如下
当颜色的值为连续型变量时,采用colorbar的图例更加直观,代码如下
scatter = plt.scatter(x= np.random.randn(10), y=np.random.randn(10),s=40 * np.arange(10),c=np.random.choice(np.arange(4), 10))
plt.colorbar(scatter)
输出结果如下
2. 点的大小图例
legend_elements方法是有很多参数可以调整的,其中prop参数指定返回的信息,有两种取值,默认是colors, 表示返回的是点的颜色信息,取值为sizes时,返回的是点的大小信息。另外还有一个参数是num, 当图例的取值为连续型时,num指定了图例上展示的点的个数,用法如下
scatter = plt.scatter(x= np.random.randn(10), y=np.random.randn(10),s=40 * np.arange(10),c=np.random.choice(np.arange(4), 10))
plt.legend(*scatter.legend_elements(prop='sizes', num = 6))
输出结果如下
3. 组合图例
上述的可视化效果都比较简单,通过matplotlib.pyplot就可以搞定了,对于图例的组合,需要借助axes来实现,代码如下
fig, ax = plt.subplots()
scatter = ax.scatter(x= np.random.randn(10), y=np.random.randn(10),s=40 * np.arange(10),c=np.random.choice(np.arange(4), 10))
legend1 = ax.legend(*scatter.legend_elements(prop='colors'), loc='upper left',title='colors',bbox_to_anchor=(1, 0, 0.5, 1))
ax.add_artist(legend1)
legend2 = ax.legend(*scatter.legend_elements(prop='sizes', num = 6), loc='lower left',title='sizes',bbox_to_anchor=(1, 0, 0.5, 1))
输出结果如下
从这里也可以看出,对于简单的图片展示,pyplot模块为我们提供了便利,但是复杂的图形组合,还是需要用axes来实现。
·end·
联系客服