matplotlib基础绘图命令之scatter

时间:2022-07-22
本文章向大家介绍matplotlib基础绘图命令之scatter,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在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·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。