我正在尝试生成一个散点图,它有两个不同的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的方式?
答案 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()
以下是显示现在的样子::
答案 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的更广泛的答案。