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

Dr *_*tor 10 python matplotlib scatter-plot colorbar

我正在使用matplotlib库在一个图上绘制同一变量的多个数字.我不是在寻找colorbar的次要情节,这是占主导地位的搜索材料.我绘制多个scatters,但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)
Run Code Online (Sandbox Code Playgroud)

Imp*_*est 6

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

可以norm是一个Normalize实例,对其设置最小值和最大值并在其之间产生线性缩放。当然,您也可以使用matplotlib.colorslike 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)
Run Code Online (Sandbox Code Playgroud)


MSe*_*ert 5

它需要一些额外的工作:

  • 您必须获得cs 的最小值和最大值(颜色条值)
  • clim每个散点图都必须

首先是最小和最大:

zs = np.concatenate([z1, z2, z3], axis=0)
min_, max_ = zs.min(), zs.max()
Run Code Online (Sandbox Code Playgroud)

然后使用以下方式绘制散点图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)
Run Code Online (Sandbox Code Playgroud)

对于非常简单的数据集:

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]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • `clim` 似乎不再适用于较新的 matplotlib 版本,但它的用法可以替换为 `vmin` 和 `vmax`,如下所示: `plt.scatter(x1, y1, c=z1, vmin=min_, vmax= max_)`,后跟当前示例中的 `plt.colorbar`。 (2认同)