一个用于多个散点图的颜色条

时间:2017-09-08 00:31:26

标签: python matplotlib scatter-plot colorbar

我使用matplotlib库在一个地块上绘制同一变量的多个数字。 我没有为子图寻找colorbar,这是主要的搜索素材。我绘制了多个scatter s,但colorbar仅设置为最后一个散点I图的值。

以下是代码的一部分:

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)

2 个答案:

答案 0 :(得分:2)

这需要一些额外的工作:

  • 您必须获得c s(颜色栏值)
  • 的最小值和最大值
  • 您必须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]

enter image description here

答案 1 :(得分:0)

scatternorm个参数。对所有散射使用相同的norm可确保任何绘图(因此也是最后一个)生成的颜色条对于所有散点图都是相同的。

norm可以是Normalize实例,设置最小值和最大值,并在其间产生线性缩放。当然,您也可以使用matplotlib.colors中提供的任何其他规范,例如PowerNormLogNorm等。

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)