多个散点图的一个颜色条
One colorbar for multiple scatter plots
我正在使用 matplotlib
库在一个图上绘制同一变量的多个图形。 我不是在寻找 colorbar
子图 ,这是主要搜索 material。我绘制了多个 scatter
,但 colorbar
仅设置为我绘制的最后一个散点的值。
代码部分如下:
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s')
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o')
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^')
plt.colorbar().set_label('Wind speed',rotation=270)
这需要一些额外的工作:
- 您必须获得
c
的最小值和最大值(颜色栏值)
- 你必须
clim
每个散点图
首先是最小值和最大值:
zs = np.concatenate([z1, z2, z3], axis=0)
min_, max_ = zs.min(), zs.max()
然后散点图clim
:
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s')
plt.clim(min_, max_)
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o')
plt.clim(min_, max_)
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^')
plt.clim(min_, max_)
plt.colorbar().set_label('Wind speed',rotation=270)
对于一个非常简单的数据集:
x1, x2, x3 = [1,2,3], [2,3,4], [3,4,5]
y1 = y2 = y3 = [1, 2, 3]
z1, z2, z3 = [1,2,3], [4,5,6], [7,8,9]
scatter
有一个 norm
参数。对所有散点图使用相同的 norm
可确保任何图(因此也是最后一个)生成的颜色条对于所有散点图都是相同的。
norm
可以是一个 Normalize
实例,设置了最小值和最大值,并在两者之间产生线性缩放。当然,您也可以使用 matplotlib.colors
中提供的任何其他规范,例如 PowerNorm
、LogNorm
等
mini, maxi = 0, 2 # or use different method to determine the minimum and maximum to use
norm = plt.Normalize(mini, maxi)
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s', norm=norm)
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o', norm=norm)
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^', norm=norm)
plt.colorbar().set_label('Wind speed',rotation=270)
我正在使用 matplotlib
库在一个图上绘制同一变量的多个图形。 我不是在寻找 colorbar
子图 ,这是主要搜索 material。我绘制了多个 scatter
,但 colorbar
仅设置为我绘制的最后一个散点的值。
代码部分如下:
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s')
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o')
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^')
plt.colorbar().set_label('Wind speed',rotation=270)
这需要一些额外的工作:
- 您必须获得
c
的最小值和最大值(颜色栏值) - 你必须
clim
每个散点图
首先是最小值和最大值:
zs = np.concatenate([z1, z2, z3], axis=0)
min_, max_ = zs.min(), zs.max()
然后散点图clim
:
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s')
plt.clim(min_, max_)
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o')
plt.clim(min_, max_)
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^')
plt.clim(min_, max_)
plt.colorbar().set_label('Wind speed',rotation=270)
对于一个非常简单的数据集:
x1, x2, x3 = [1,2,3], [2,3,4], [3,4,5]
y1 = y2 = y3 = [1, 2, 3]
z1, z2, z3 = [1,2,3], [4,5,6], [7,8,9]
scatter
有一个 norm
参数。对所有散点图使用相同的 norm
可确保任何图(因此也是最后一个)生成的颜色条对于所有散点图都是相同的。
norm
可以是一个 Normalize
实例,设置了最小值和最大值,并在两者之间产生线性缩放。当然,您也可以使用 matplotlib.colors
中提供的任何其他规范,例如 PowerNorm
、LogNorm
等
mini, maxi = 0, 2 # or use different method to determine the minimum and maximum to use
norm = plt.Normalize(mini, maxi)
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s', norm=norm)
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o', norm=norm)
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^', norm=norm)
plt.colorbar().set_label('Wind speed',rotation=270)