首页 > 解决方案 > 更改颜色条限制而不更改它在散点图中表示的数据的值

问题描述

我正在尝试更改附加到散点图的颜色条,以便颜色条的最小值和最大值是数据的最小值和最大值,但我希望数据以零为中心,因为我使用的是白色的颜色图在零。这是我的例子

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 61)
y = np.linspace(0, 1, 61)
C = np.linspace(-10, 50, 61)
M = np.abs(C).max() # used for vmin and vmax

fig, ax = plt.subplots(1, 1, figsize=(5,3), dpi=150)
sc=ax.scatter(x, y, c=C, marker='o', edgecolor='k', vmin=-M, vmax=M, cmap=plt.cm.RdBu_r)
cbar=fig.colorbar(sc, ax=ax, label='$R - R_0$ (mm)')
ax.set_xlabel('x')
ax.set_ylabel('y')

在此处输入图像描述

正如您从附图中看到的那样,颜色条下降到-M,我希望条下降到 -10,但如果我让vmin=-10那么颜色条将不会归零为白色。通常,在使用颜色条时设置vmin为 +/-会自动按照我想要的方式排序。这种行为是我在使用时所期望的,而不是使用和设置它。下面显示了一个显示我想要在我的示例中的默认颜色条行为的示例Mcontourfcontourflevels=np.linspace(-M,M,61)vminvmaxlevels=62contourfscatter

plt.figure(figsize=(6,5), dpi=150)
plt.contourf(x, x, np.reshape(np.linspace(-10, 50, 61*61), (61,61)),
                   levels=62, vmin=-M, vmax=M, cmap=plt.cm.RdBu_r)
plt.colorbar(label='$R - R_0$ (mm)')

在此处输入图像描述

有人有想法吗?我发现了这个我认为可以解决问题的链接,但是在执行该cbar.outline.set_ydata行时我得到了这个错误AttributeError: 'Polygon' object has no attribute 'set_ydata'

编辑有点恼火,有人在没有让我澄清他们可能有的任何问题的情况下关闭了这个问题,因为没有一个提议的解决方案是我所要求的。至于Normalize.TwoSlopeNorm,我不想重新调整较小的负边以使用整个颜色图范围,我只希望附加到图表一侧的颜色条停止在-10这个链接也不能解决我的问题,因为它又是TwoSlopeNorm解决方案。

标签: python-3.xmatplotlibcolorbarscatter

解决方案


更改colorbar的ylim后,周围的刺形成的矩形太大了。您可以使此轮廓不可见。然后添加一个新的矩形边框:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 61)
y = np.linspace(0, 1, 61)
C = np.linspace(-10, 50, 61)
M = np.abs(C).max()  # used for vmin and vmax

fig, ax = plt.subplots(1, 1, figsize=(5, 3), dpi=150)
sc = ax.scatter(x, y, c=C, marker='o', edgecolor='k', vmin=-M, vmax=M, cmap=plt.cm.RdBu_r)
cbar = fig.colorbar(sc, ax=ax, label='$R - R_0$ (mm)')

cb_ymin = C.min()
cb_ymax = C.max()
cb_xmin, cb_xmax = cbar.ax.get_xlim()
cbar.ax.set_ylim(cb_ymin, cb_ymax)
cbar.outline.set_visible(False)  # hide the surrounding spines, which are too large after set_ylim
cbar.ax.add_patch(plt.Rectangle((cb_xmin, cb_ymin), cb_xmax - cb_xmin, cb_ymax - cb_ymin,
                                fc='none', ec='black', clip_on=False))
plt.show()

减少颜色条


推荐阅读