昨晚用matplotlib画用户年龄和消费的散点图,一开始全是黑点挤成一团,根本看不出规律,查了半天,全是ax.scatter里那几个参数的锅。
最简写法长这样
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.scatter(x, y)
plt.show()x是横坐标,y是纵坐标,两个长度必须一样。如果数据是DataFrame的两列,直接把列传进去就行,行数对不上会直接报错ValueError。
s和c控制大小颜色,别混用
s是点的大小,别写成size。c是颜色,可以是一个固定颜色,也可以是一列数值让系统自动配色。想按第三个变量上色,用c加cmap。
ax.scatter(x, y, s=20, c=score, cmap=viridis, alpha=0.6)
# alpha是透明度,点叠在一起时加上,分布马上能看清点多挤成一坨时,透明度是救命的,0.5左右一加,密集区颜色自然加深。点太多了再加个edgecolors=None能省点绘制时间。
和plt.scatter有什么区别
- plt.scatter:直接在当前图上画,写脚本、临时看数图最快
- ax.scatter:指定往哪个子图上画,画多子图、仪表盘、嵌入界面的情况用它
- 混用后果:混着写容易把图画到错的地方,多子图时一律用ax版本
图太卡或者太乱怎么办
几十万个点会卡成PPT,办法是抽样画一小部分,或者换hexbin这种聚合图。想把点分开颜色,用c传分类标签,配cmap,比手动画几个scatter快得多。
一句话取舍:临时看分布用plt.scatter,多子图、要嵌入GUI或Web的,老老实实用ax.scatter。