【问题标题】:One colorbar for multiple scatter plots一个颜色条用于多个散点图
【发布时间】:2018-02-16 19:34:19
【问题描述】:

我正在使用matplotlib 库在一个绘图上绘制同一变量的多个数字。 我不是为子图寻找 colorbar,这是主要的搜索材料。我绘制了多个scatters,但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)

【问题讨论】:

  • 您是否尝试在每个.scatter 之后调用plt.colorbar().set_label('Wind speed',rotation=270)
  • 是的,但这增加了三个颜色条,这不是我想要的。我需要一个包含散点图中所有范围的颜色条。

标签: python matplotlib scatter-plot colorbar


【解决方案1】:

这需要一些额外的工作:

  • 您必须获取cs(颜色条值)的最小值和最大值
  • 你必须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]

【讨论】:

  • 在使用 Axes 对象时,我不知道该怎么做。轴没有climset_clim 方法,当我在做散点图后尝试从轴对象get_images() 时,我得到一个空列表(图像应该有set_clim)。
  • clim 似乎不再适用于较新的 matplotlib 版本,但它的用法可以替换为 vminvmax,如下所示:plt.scatter(x1, y1, c=z1, vmin=min_, vmax=max_),然后是 plt.colorbar在当前示例中。
【解决方案2】:

scatter 有一个 norm 参数。对所有散点图使用相同的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)

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 2021-07-28
    • 2019-03-22
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多