在matplotlib中绘制多个y轴和颜色栏

2024-05-15 10:01:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试生成一个散点图,它有两个不同的y轴和一个色条。

下面是使用的伪代码:

#!/usr/bin/python

import matplotlib.pyplot as plt
from matplotlib import cm

fig = plt.figure()
ax1 = fig.add_subplot(111)
plt.scatter(xgrid,
        ygrid,
        c=be,                   # set colorbar to blaze efficiency
        cmap=cm.hot,
        vmin=0.0,
        vmax=1.0)

cbar = plt.colorbar()
cbar.set_label('Blaze Efficiency')

ax2 = ax1.twinx()
ax2.set_ylabel('Wavelength')

plt.show()

它产生了这个情节: plot

我的问题是,如何为“波长”轴使用不同的刻度,以及如何将色条向右移动,使其不受波长的影响?


Tags: 代码importbinmatplotlibusrfigcmplt
2条回答

plt.colorbar()是为非常简单的情况而制作的,例如,没有真正考虑具有2个y轴的绘图。 对于colorbar位置和属性的细粒度控制,您几乎应该始终使用colorbar指定要在哪个轴上打印colorbar。

# on the figure total in precent l    b      w , height 
cbaxes = fig.add_axes([0.1, 0.1, 0.8, 0.05]) # setup colorbar axes. 
# put the colorbar on new axes
cbar = fig.colorbar(mapable,cax=cbaxes,orientation='horizontal')

注意,colorbar使用以下关键字:

keyword arguments:

cax None | axes object into which the colorbar will be drawn ax None | parent axes object from which space for a new colorbar axes will be stolen

你也可以在这里看到我关于figure colorbar on separate axes的更广泛的答案。

@OZ123抱歉,我花了这么长时间才回复。Matplotlib具有可扩展的可定制性,有时会让您对实际操作感到困惑。感谢您对创建单独轴的帮助。

然而,我不认为我需要那么多的控制,我最终只使用了PAD关键字参数

fig.colorbar()

这提供了我所需要的。

然后伪代码变成:

#!/usr/bin/python

import matplotlib.pyplot as plt
from matplotlib import cm

fig = plt.figure()
ax1 = fig.add_subplot(111)
mappable = ax1.scatter(xgrid,
                       ygrid,
                       c=be,                   # set colorbar to blaze efficiency
                       cmap=cm.hot,
                       vmin=0.0,
                       vmax=1.0)

cbar = fig.colorbar(mappable, pad=0.15)
cbar.set_label('Blaze Efficiency')

ax2 = ax1.twinx()
ax2.set_ylabel('Wavelength')

plt.show()

以下是显示它现在的样子:enter image description here

相关问题 更多 >