昨晚用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。