我想绘制频谱图,y轴的刻度取决于周期,因此我想要一个反向对数刻度。问题在于:我发现使用
pcolormesh()
可以实现,但不能使用 imshow()
。对我来说,imshow()
比 pcolormesh()
更有效率,这是我更喜欢它的一个很好的原因!我错过了什么吗?我不知道如何更清楚地表达,所以这里有一个可重复的示例:import matplotlib.pyplot as plt
import numpy as np
size = 10
data = np.arange(size * size).reshape((size, size))
x_start = 1
x_end = 10
y_start = 1
y_end = 10
extent = [x_start, x_end, y_start, y_end]
fig, axes = plt.subplots(1,4)
axes[0].set_yscale('log')
im = axes[0].imshow(data, extent=extent, origin='upper', interpolation='None', cmap='viridis')
axes[1].set_yscale('log')
im2 = axes[1].imshow(data, extent=extent, origin='lower', interpolation='None', cmap='viridis')
axes[2].set_yscale('log')
im2 = axes[2].imshow(data, extent=extent, origin='lower', interpolation='None', cmap='viridis')
axes[2].invert_yaxis()
y = np.arange(1,11)*0.1
x = np.arange(0,10)
axes[3].set_yscale('log')
im3 = axes[3].pcolormesh(x, 1/y , data)
axes[0].set_title("not ok")
axes[1].set_title("not ok")
axes[2].set_title("not ok")
axes[3].set_title("OK")
plt.tight_layout()
plt.show()
在前面的图像中,使用imshow()
并不会改变密集坐标,它们始终位于图形顶部,即使我使用lower
或upper
origin
。使用pcolormesh()
,我成功地将紧密坐标放置在图形底部。
我希望通过使用imshow()
来获得“ok”图像!
这个问题与这个有关:Aggregate several AxesSubplot after multiprocessing to draw a matplotlib figure
data.shape
是什么? - Sam Mason