( 图表 ) 散布图
这篇教学会使用 matplotlib pyplot 模组里的 scatter() 方法,将数据绘制成二维散布图 ( Scatter Chart ),并进一步介绍 scatter() 的相关用法。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
import matplotlib
要进行本篇的范例,必须先加载 matplotlib 函数库的 pyplot 模组,范例将其独立命名为 plt。
import matplotlib.pyplot as plt
pyplot.scatter() 参数说明
pyplot.scatter() 常用的参数如下表所示 ( 完整参数参考:matplotlib.pyplot.scatter ):
| 参数 | 说明 |
|---|---|
| x | 必填,第一组数据 ( x 轴 )。 |
| y | 必填,第二组数据 ( y 轴 )。 |
| c | 数据点的颜色,支援数组数据 ( 除了十六进制色码,也可填入颜色代码,例如 r、g、b、m、c、y...等,参考:color 列表 )。 |
| s | 数据点的尺寸,默认和数据同大小,支援数组数据。 |
| marker | 数据点样式,默认圆点 ( 数据点样式代码为 .、,、o、v...等,参考:markers 列表 )。 |
| cmap | 颜色地图,如果 c 为数据数据,会根据 c 的数据对应指定颜色 ( 参考:colormaps )。 |
| vmin | 对照颜色地图的最小值。 |
| vmax | 对照颜色地图的最大值。 |
| alpha | 数据点透明度,默认 1,范围 0 ( 完全透明 ) ~ 1 ( 完全不透明 )。 |
| linewidths | 数据点外框粗细,默认无外框,支援数组数据。 |
| edgecolors | 数据点外框颜色,默认无外框,颜色设定等同 c。 |
绘制第一张散布图
下方的程序码,执行后会画出有十个数据点的图表。
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9,10]
y = [11,8,26,16,9,17,23,4,14,10]
plt.scatter(x,y)
plt.show()
额外设定 s、c 和 cmap,就能根据数据点的数据,对应出指定的颜色,假设数据的范围是 0~100,颜色地图是红橙黄绿蓝,则 0~20 对应红色,21~40 对应橙色,41~60 对应黄色,61~80 对应绿色,81~100 对应蓝色。
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9,10]
y = [11,8,26,16,9,17,23,4,14,10]
size = [i*100 for i in y] # 放大資料點數據 100 倍,比較容易觀察尺寸
plt.scatter(x,y,s=size,c=size,cmap='Set1') # 使用 Set1 的 colormap
plt.show()
如果加上 vmin 和 vmax 的设定,能设定颜色的最大值与最小值,下方的例子,当数值小于 1000 时,只会显示红色,当数值大于 2000 时,只会显示灰色。
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9,10]
y = [11,8,26,16,9,17,23,4,14,10]
size = [i*100 for i in y]
plt.scatter(x,y,s=size,c=size,cmap='Set1',vmin=1000,vmax=2000)
plt.show()
多组数据的散布图
如果有多组数据需要同时呈现,可以独立绘制每组散布图,完成后再使用 show() 的方式显示散布图。
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9,10]
y1 = [11,8,26,16,9,17,23,4,14,10] # 第一組的 Y 軸數據
s1 = [i*100 for i in y1] # 將第一組的 Y 軸數據放大 100 倍作為園點尺寸
y2 = [19,29,15,12,21,6,7,8,18,2] # 第二組的 Y 軸數據
s2 = [i*100 for i in y2] # 將第二組的 Y 軸數據放大 100 倍作為園點尺寸
plt.scatter(x,y1,s=s1,c='b',alpha=0.5) # 設定透明度為 0.5
plt.scatter(x,y2,s=s2,c='r',alpha=0.5) # 設定透明度為 0.5
plt.show()
搭配 NumPy 绘制散布图
由于 matplotlib 能完美的和 NumPy 整合,所以能透过 NumPy 强大的处理或产生数据能力,快速产生许多绘图用的数据,下方的例子,使用 NumPy 产生每组 10 个共三组 100~2000 随机数字 y 和 size,使用 matplotlib 绘制出散布图 ( 如果不指定颜色,每组数据会自动套用不同的颜色 )。
import matplotlib.pyplot as plt
from numpy import random
x = range(0,10)
y = random.randint(100,2000,size=(3,10)) # 產生 3x10 陣列,內容為 100~2000 隨機數字
size = random.randint(100,2000,size=(3,10)) # 產生 3x10 陣列,內容為 100~2000 隨機數字
for i in range(0,3):
plt.scatter(x,y[i],s=size[i],alpha=0.5)
plt.show()
下方的例子,使用 NumPy 随机数的“常态分布”产生 500 个数据点,再透过 matplotlib 画出散布图。
from numpy import random
import matplotlib.pyplot as plt
x = random.normal(5,50,500)
y = random.normal(5,50,500)
plt.scatter(x,y,alpha=0.5,s=100)
plt.show()
微信扫码关注
抖音扫码关注