在 matplotlib 中向颜色条添加标记或线条

问题描述 投票:0回答:1

我有以下几行代码来生成热图(

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

它产生这个图像:

我想放置:

  1. 颜色条上平均值 (0.186) 处的标记。
  2. 颜色条上 RMS 值 (0.295) 处的水平线。

有什么意见吗?

python matplotlib
1个回答
17
投票

这比预想的要容易。我没有意识到颜色条在

plt.colorbar().ax

中有一个可绘制的轴
    cb = plt.colorbar()
    cb.ax.plot(0.5, mean, 'w.')
    cb.ax.plot([0, 1], [rms]*2, 'w')

或者,正如@OrOrg 指出的那样,

    cb = plt.colorbar()
    cb.ax.plot(0.5, mean, 'w.')
    cb.ax.axhline(rms, c='w')

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

根据@S.A.注释,x/y 轴位于

(min(data), max(data))
之间。但是,此示例显示 x 轴为
(0, 1)
,其中 x 轴数据为
(-pi/2, pi/2)
。 Y轴确认为
(min(data), max(data))

© www.soinside.com 2019 - 2024. All rights reserved.