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

时间:2012-06-06 20:01:57

标签: python matplotlib scatter colorbar

我正在尝试生成一个散点图,它有两个不同的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 http://i48.tinypic.com/2zix7x1.png

我的问题是,你如何使用不同比例的“波长”轴,以及如何将颜色条更多地向右移动,使其不符合Wavelength的方式?

2 个答案:

答案 0 :(得分: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()

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

答案 1 :(得分:2)

plt.colorbar()适用于非常简单的情况,例如并没有真正考虑过2轴y的情节。 对于颜色条位置和属性的细粒度控制,您几乎应该始终使用颜色条指定要在哪些轴上绘制颜色条。

# 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采用以下关键字:

  

关键字参数:

     

CAX       没有|轴对象将在其中绘制颜色条 ax       没有|父轴对象从哪个空间用于新的       colorbar轴将被盗

您还可以在此处看到有关figure colorbar on separate axes的更广泛的答案。