带有 imshow 和“范围”的对数刻度?

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

我在使用 imshow 绘制对数 y 轴图时遇到问题。我的相关代码如下:

plt.imshow(power[channel], extent=(0,600,1,45), \
origin='lower', cmap='jet', aspect='auto', vmin=0, vmax=0.00025)
plt.colorbar()
plt.show(block=False)

给出以下情节:

我的问题是我需要“范围”参数,否则在我的情况下 y 轴标签不正确。然而,imshow(包括“范围”参数)似乎不允许对数轴缩放。添加行

plt.yscale('log')

给我警告“非线性轴不支持图像。”

有没有办法可以在保持“范围”功能的同时获得对数 y 轴缩放?

python matplotlib imshow
1个回答
1
投票

我想你现在已经解决了这个问题,但我想发布一个答案,以防有人来找(像我一样)。我在尝试使用 log y 轴做

plt.imshow()
时遇到了一个非常类似的问题:使用范围给了我错误的轴标签。

我的“解决方案”是使用

plt.pcolormesh()
而不是
plt.imshow()
。您可以将 x 和 y 网格传递到图像旁边,然后可以设置对数轴,如下所示。

import numpy as np
import matplotlib.pyplot as plt

# create the x coordinate
x = np.linspace(0, 50)
# create logarithmic y coordinate
y = np.logspace(1, 4)

X, Y = np.meshgrid(x, y)

# create random image data to use
im_data = np.random.rand(x.size, y.size)

ax = plt.gca()
ax.pcolormesh(X, Y, im_data)

# make y axis logarithmic
ax.set_yscale('log')
plt.show()

输出为:

script output

您可以看到它很好地处理了对数轴。希望这对您或其他前来寻找的人有所帮助(我意识到这并不能回答您的确切问题,但它是一个直接的解决方法)。

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