更改y轴对数刻度的imshow()显示函数

4
我想绘制频谱图,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()

enter image description here

在前面的图像中,使用imshow()并不会改变密集坐标,它们始终位于图形顶部,即使我使用lowerupperorigin。使用pcolormesh(),我成功地将紧密坐标放置在图形底部。

我希望通过使用imshow()来获得“ok”图像!

这个问题与这个有关:Aggregate several AxesSubplot after multiprocessing to draw a matplotlib figure


1
可能值得一提的是,这是一个关于编程的后续问题,来源于 https://stackoverflow.com/q/57269797/1358308。 - Sam Mason
另外,您要处理的数据有多大?即,对于您实际想要绘制的一些数据,data.shape是什么? - Sam Mason
形状:(2048,15357) - n0n0bstan
好的,因此在过程中将其重新采样为更合理的尺寸可能是一个好主意。如果能够在 matplotlib 处理它之前缩小到大约 (500,500),那么速度会快得多。 - Sam Mason
优化问题在 https://stackoverflow.com/questions/57269797/aggregate-several-axessubplot-after-multiprocessing-to-draw-a-matplotlib-figure,让我们尝试将评论保留在正确的线程中。 - n0n0bstan
1个回答

0

这是你想要得到的吗?

axes[1].set_yscale('log')
im2 = axes[1].imshow(data, extent=extent, origin='lower', interpolation='None', cmap='viridis')
axes[1].invert_yaxis()

enter image description here


嗨!谢谢你的尝试!不幸的是,invert-yaxis()并不足够:它也会反转y轴标签,而我并不想要这个...我现在更新了我的问题。 - n0n0bstan
我认为使用imshow不可能实现这个。也许NonUniformImage会有所帮助。 - ImportanceOfBeingErnest

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