Matplotlib 用双刻度绘制颜色条

Matplotlib 用双刻度绘制颜色条,matplotlib,colorbar,Matplotlib,Colorbar,我想画一个(垂直的)色条,每边有两个不同的刻度(对应于相同数量的两个不同单位)。一边是华氏温度,另一边是摄氏温度。显然,我需要分别为每一侧指定刻度 你知道我该怎么做吗?这应该让你开始: import matplotlib.pyplot as plt import numpy as np # generate random data x = np.random.randint(0,200,(10,10)) plt.pcolormesh(x) # create the colorbar # th

我想画一个(垂直的)色条,每边有两个不同的刻度(对应于相同数量的两个不同单位)。一边是华氏温度,另一边是摄氏温度。显然,我需要分别为每一侧指定刻度


你知道我该怎么做吗?

这应该让你开始:

import matplotlib.pyplot as plt
import numpy as np

# generate random data
x = np.random.randint(0,200,(10,10))
plt.pcolormesh(x)

# create the colorbar
# the aspect of the colorbar is set to 'equal', we have to set it to 'auto',
# otherwise twinx() will do weird stuff.
cbar = plt.colorbar()
pos = cbar.ax.get_position()
cbar.ax.set_aspect('auto')

# create a second axes instance and set the limits you need
ax2 = cbar.ax.twinx()
ax2.set_ylim([-2,1])

# resize the colorbar (otherwise it overlays the plot)
pos.x0 +=0.05
cbar.ax.set_position(pos)
ax2.set_position(pos)

plt.show()

如果为颜色栏创建子图,则可以为该子图创建一个双轴,并像普通轴一样对其进行操作

import matplotlib.colors as mcolors
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1,2.7)
X,Y = np.meshgrid(x,x)
Z = np.exp(-X**2-Y**2)*.9+0.1

fig, (ax, cax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios":[15,1]})

im =ax.imshow(Z, vmin=0.1, vmax=1)
cbar = plt.colorbar(im, cax=cax)
cax2 = cax.twinx()

ticks=np.arange(0.1,1.1,0.1)
iticks=1./np.array([10,3,2,1.5,1])
cbar.set_ticks(ticks)
cbar.set_label("z")
cbar.ax.yaxis.set_label_position("left")
cax2.set_ylim(0.1,1)
cax2.set_yticks(iticks)
cax2.set_yticklabels(1./iticks)
cax2.set_ylabel("1/z")

plt.show()

我正在为我的颜色条使用一个插入轴,出于某种原因,我发现上面的答案从v3.4.2开始不再有效。twinx占据了整个原始子地块

所以我只是复制了插入轴(而不是使用twinx),并在原始插入上增加了zorder

axkws = dict(zorder=2)
cax = inset_axes(
    ax, width="100%", height="100%", bbox_to_anchor=bbox, 
    bbox_transform=ax.transAxes, axes_kwargs=axkws
)
cbar = self.fig.colorbar(mpl.cm.ScalarMappable(cmap=cmap), cax=cax)
cbar.ax.yaxis.set_ticks_position('left')
    
caxx = inset_axes(
    ax, width="100%", height="100%", 
    bbox_to_anchor=bbox, bbox_transform=ax.transAxes
)
caxx.yaxis.set_ticks_position('right')

,您是否尝试过此方法,发布示例数据我正在使用
pcolormesh
绘制二维数据。我的问题是关于颜色条,而不是轴本身。是否可以提供样品data@andreas-h颜色条位于轴上(您可以使用
ax
属性访问它),因此您应该能够像使用更大的打印轴一样使用缩放。您不需要调整颜色条的大小,只需将axisbelow设置为False:cbar.ax.set_axisbelow(False)#1。axis ax2=cbar.ax.twinx()ax2.set_ylim([low,high])#limts ax2的low-high。set_axislower(False)#2。axis@Andreas我不明白你的意思:对Axis实例的大小或位置没有影响。啊,我明白你的意思了,我以为是偏移2。axis-因此,在您的上下文中忽略这一点,抱歉造成混淆