如何在matplotlib中设置颜色条范围?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (568)

我有以下代码:

import matplotlib.pyplot as plt

cdict = {
  'red'  :  ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)),
  'green':  ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)),
  'blue' :  ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45))
}

cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024)

plt.clf()
plt.pcolor(X, Y, v, cmap=cm)
plt.loglog()
plt.xlabel('X Axis')
plt.ylabel('Y Axis')

plt.colorbar()
plt.show()

因此,这会使用指定的色彩图在X轴和Y轴上生成值“v”的图形。X和Y轴是完美的,但颜色映射在v的最小值和最大值之间扩展。我想强制颜色映射的范围介于0和1之间。

我想过使用:

plt.axis(...)

设置坐标轴的范围,但这只需要X和Y的最小值和最大值的参数,而不是色彩图。

为了清楚起见,假设我有一个图的值范围(0 ... 0.3),另一个图的值(0.2 ... 0.8)。

在这两个图表中,我都希望颜色条的范围是(0 ... 1)。在这两张图中,我希望使用上面所有的cdict范围来使这个范围的颜色相同(因此在这两个图中的0.25都是相同的颜色)。在第一张图中,0.3到1.0之间的所有颜色不会在图中显示,但会在侧面的颜色栏中显示。另一方面,0到0.2之间的所有颜色,以及0.8到1之间的所有颜色都不会在图中显示,但会在侧面的颜色栏中显示。

提问于
用户回答回答于

使用vminvmax强制颜色的范围。这是一个例子:

import matplotlib as m
import matplotlib.pyplot as plt
import numpy as np

cdict = {
  'red'  :  ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)),
  'green':  ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)),
  'blue' :  ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45))
}

cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024)

x = np.arange(0, 10, .1)
y = np.arange(0, 10, .1)
X, Y = np.meshgrid(x,y)

data = 2*( np.sin(X) + np.sin(3*Y) )

def do_plot(n, f, title):
    #plt.clf()
    plt.subplot(1, 3, n)
    plt.pcolor(X, Y, f(data), cmap=cm, vmin=-4, vmax=4)
    plt.title(title)
    plt.colorbar()

plt.figure()
do_plot(1, lambda x:x, "all")
do_plot(2, lambda x:np.clip(x, -4, 0), "<0")
do_plot(3, lambda x:np.clip(x, 0, 4), ">0")
plt.show()
用户回答回答于

使用CLIM函数(相当于MATLAB中的CAXIS函数):

plt.pcolor(X, Y, v, cmap=cm)
plt.clim(-4,4)
plt.show()

扫码关注云+社区

领取腾讯云代金券