加入颜色对照表
使用 matplotlib 绘制图表时,常常会将数据点上色,进行不同颜色的区隔,当数据点具有渐层色彩后,可以加入“颜色对照表 colorbar”,让整体数据更容易观察,这篇教学将会介绍如何加入颜色对照表 colorbar。
快速导览
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
什么是 colorbar?
colorbar ( 颜色对照表 ) 是一个辅助图表的对照表,显示在带有渐层色彩的图表旁边,提醒用户图表内颜色所代表的意义。
加入 colorbar
如果只是要加入 colorbar,只需要在绘制图表的后方,加上 colorbar() 的方法,就可以在图表上加入 colorbar,下方的程序码执行后,会在散布图的右侧加上 colorbar,颜色使用 PiYG 的 colormap。
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, c=y, cmap='PiYG') # 繪製散布圖,顏色使用 PiYG 的 colormap
plt.colorbar() # 加入 colorbar
plt.show()
下方的例子使用 NumPy 产生每组 50 个 100~2000 随机数字 y 和 size,使用 matplotlib 绘制出散布图,并加入 colorbar。
参考:random.randint()。
import matplotlib.pyplot as plt
from numpy import random
x = range(0,50)
y = random.randint(100,2000,size=50)
s = random.randint(10,500,size=50)
plt.scatter(x, y, s=s, c=s, cmap='Reds')
plt.colorbar()
plt.show()
多个子图表的 colorbar
colorbar() 有下列几个常用的参数,设定参数后,就能将 colorbar 套用在不同的子图表 ( 完整参数参考:matplotlib.pyplot.colorbar )。
| 参数 | 说明 |
|---|---|
| mappable | 指定的子图表。 |
| ax | 对应指定的子图表座标系统。 |
| orientation | 默认 vertical 垂直,可设定 horizontal 水平。 |
| pad | 离图表的间距,默认垂直 0.05,水平 0.15。 |
下方的程序码,先定义 a1 和 a2 变数为两张子图表,添加 colorbar 时,将 mappable 指定为 a1 和 a2,ax 指定为该子图表的座标系统,就能够在指定的子图表内,加上 colorbar。
import matplotlib.pyplot as plt
from numpy import random
x = range(0,50)
y = random.randint(100,2000,size=50)
s = random.randint(10,500,size=50)
fig, ax = plt.subplots(1,2)
a1 = ax[0].scatter(x, y, s=s, c=s, cmap='Reds')
a2 = ax[1].scatter(x, y, s=s, c=s, cmap='Blues')
plt.colorbar(a1,ax=ax[0])
plt.colorbar(a2,ax=ax[1],orientation='horizontal',pad=0.1) # 調整參數,改成水平 colorbar
plt.tight_layout()
plt.show()
下方的程序码,会将前两个子图表共用一个 colorbar。
import matplotlib.pyplot as plt
from numpy import random
x = range(0,50)
y = random.randint(100,2000,size=50)
s = random.randint(100,2000,size=50)
fig, ax = plt.subplots(3,1)
a1 = ax[0].scatter(x, y, s=s, c=s, cmap='Reds')
a2 = ax[1].scatter(x, y, s=s, c=s, cmap='Reds')
a3 = ax[2].scatter(x, y, s=s, c=s, cmap='Blues')
plt.colorbar(a1,ax=[ax[0],ax[1]]) # ax 設定為串列,就能共用一個 colorbar
plt.colorbar(a3,ax=ax[2])
#cbar3.ax.tick_params(labelsize=18, labelcolor='#00c', direction='in', size=20, width=5, length=1)
#plt.tight_layout()
plt.show()
设定 colorbar 属性样式
透过调整 colorbar 的属性,能够设定 colorbar 的样式,常用的样式属性如下:
| 属性 | 说明 |
|---|---|
| extend | 首尾是否为延伸出去的“尖端”,默认 neither 表示不延伸 ( 两端都是“方形”),可设定 both、min、max。 |
| extendfrac | 如果 extend 设为尖端,则可设定尖端的长度,默认 0.05。 |
| extendrect | 设定延伸出去不是尖端,而是方形。 |
| ticks | colorbar 的显示标签文字,默认 None 自动产生,使用串列格式。 |
| boundaries | 是否使用索引色模式 ( 非平滑渐层 ),使用串列格式。 |
| drawedges | 是否在颜色边界处画线,默认 False 不画线,设定 True 会画线。 |
| label | colorbar 的说明文字标签。 |
下方的程序码执行后,会透过 colorbar 的属性,改变蓝色的图表的 colorbar 样式。
import matplotlib.pyplot as plt
from numpy import random
x = range(0,50)
r = range(0,2200,200)
y = random.randint(100,2000,size=50)
s = random.randint(100,2000,size=50)
fig, ax = plt.subplots(1,2)
fig.set_size_inches(10,5)
a1 = ax[0].scatter(x, y, s=s, c=s, cmap='Reds')
a2 = ax[1].scatter(x, y, s=s, c=s, cmap='Blues')
cbar1 = plt.colorbar(a1,ax=ax[0])
cbar2 = plt.colorbar(a2,ax=ax[1],
boundaries=r,
ticks=r,
label='test',
extend='both')
plt.tight_layout()
plt.show()
调整 colorbar 标签样式
colorbar() 本身的参数无法调整文字标签样式,因此必须透过 ax.tick_params() 的方法进行设定,常用的参数设定如下:
| 参数 | 说明 |
|---|---|
| labelsize | 标签文字大小。 |
| labelcolor | 标签文字颜色。 |
| direction | 标签线段位置,默认 out,可设定 in 或 inout。| |
| width | 标签线段粗细,默认 1。 |
| size | 标签线段长度, |
下方的程序码执行后,会透过 ax.tick_params(),改变蓝色的图表的 colorbar 的标签样式。
import matplotlib.pyplot as plt
from numpy import random
x = range(0,50)
y = random.randint(100,2000,size=50)
s = random.randint(10,500,size=50)
fig, ax = plt.subplots(1,2)
fig.set_size_inches(10,5)
a1 = ax[0].scatter(x, y, s=s, c=s, cmap='Reds')
a2 = ax[1].scatter(x, y, s=s, c=s, cmap='Blues')
cbar1 = plt.colorbar(a1,ax=ax[0])
cbar2 = plt.colorbar(a2,ax=ax[1])
cbar2.ax.tick_params(labelsize=18, labelcolor='#00c', direction='in', size=10, width=5)
plt.tight_layout()
plt.show()
微信扫码关注
抖音扫码关注