3

我正在尝试生成一个具有两个不同 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()

它产生了这个情节: 阴谋

我的问题是,您如何为“波长”轴使用不同的比例,以及如何将颜色条更向右移动,使其不在波长的方式中?

4

2 回答 2

5

@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()

这是展示它现在的样子在此处输入图像描述

于 2012-06-25T15:09:34.667 回答
2

the plt.colorbar() is made for really simple cases, e.g. not really thought for a plot with 2 y-axes. For a fine grained control of the colorbar location and properties you should almost always rather work with colorbar specifying on which axes you want to plot the 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')

Note that colorbar takes the following keywords:

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

you could also see here a more extended answer of mine regarding figure colorbar on separate axes.

于 2012-06-07T07:22:37.357 回答