matplotlib 对数标度与imshow和“程度”?

c2e8gylq  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(120)

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

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

这给出了以下图:

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

  1. plt.yscale('log')

给了我一个警告“图像不支持非线性轴”。
有没有一种方法可以在保持“范围”功能的同时获得对数y轴缩放?

insrf1ej

insrf1ej1#

我想你现在已经解决了这个问题,但是我想发布一个答案,以防有人来找我(像我一样)。我在尝试使用log y轴做plt.imshow()时遇到了一个非常类似的问题:使用范围给了我错误的轴标签。
我的“解决方案”是使用plt.pcolormesh()而不是plt.imshow()。你可以在你的图像旁边传递一个x和y网格,然后你可以设置你的对数轴,如我下面所示。

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # create the x coordinate
  4. x = np.linspace(0, 50)
  5. # create logarithmic y coordinate
  6. y = np.logspace(1, 4)
  7. X, Y = np.meshgrid(x, y)
  8. # create random image data to use
  9. im_data = np.random.rand(x.size, y.size)
  10. ax = plt.gca()
  11. ax.pcolormesh(X, Y, im_data)
  12. # make y axis logarithmic
  13. ax.set_yscale('log')
  14. plt.show()

输出为:

你可以看到它很好地处理了对数轴。希望这能帮助你或其他任何人来看(我知道这并不能回答你的确切问题,但它是一个直接的解决方案)。

展开查看全部

相关问题