在matplotlib中为colorbar添加标记或线条

12

我有以下代码来生成热力图 (pcolormesh)。

import matplotlib.pyplot as plt
import numpy as np

vals = np.linspace(-np.pi/2, np.pi/2, 101)
x, y = np.meshgrid(vals, vals)

z = np.abs(np.sinc(x) * np.sinc(y))

xDeg = np.rad2deg(x)
yDeg = np.rad2deg(y)

plt.pcolormesh(xDeg, yDeg, z, cmap = 'jet', vmin = 0, vmax = 1)
plt.colorbar()

plt.axis([-90, 90, -90, 90])
ticks = np.linspace(-90, 90, 13)
plt.xticks(ticks)
plt.yticks(ticks)

print np.mean(z)                # 0.186225110029
print np.sqrt(np.mean(z**2))    # 0.295710882276
plt.show()

它生成了这张图片: pcolormesh result

我想要放置:

  1. 在色条上标记平均值(0.186)。
  2. 在色条上绘制一条水平线,表示RMS值(0.295)。

有任何意见?

1个回答

16

这比预期的要容易。我没有意识到colorbar在plt.colorbar().ax中有一个可绘制的轴。

cb = plt.colorbar()
cb.ax.plot(0.5, mean, 'w.') # my data is between 0 and 1
cb.ax.plot([0, 1], [rms]*2, 'w') # my data is between 0 and 1
# Note: would need to scale mean/rms to be between 0 and 1

看起来x轴是(0,1),y轴是(0,1)。

带有颜色条标记的pcolormesh


9
色标轴对象的x轴和y轴都是以数据为基准。只有在您的示例中,这是偶然的(0,1)。在所有情况下,x轴和y轴的限制将都是(min(data), max(data)) - S.A.
3
使用cb.ax.axhline(rms, c='w')来绘制水平线可能会更清晰/更稳健。 - undefined
@OrOrg - 很好的观点。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接