【发布时间】:2019-08-20 01:40:35
【问题描述】:
我正在对数坐标轴上生成二维数组(例如,x 像素坐标是使用 logspace(log10(0.95), log10(2.08), n) 生成的。
我想使用普通的旧 imshow 以原始分辨率和缩放比例显示图像(我不需要 to stretch it;数据本身已经对数缩放),但我想添加刻度、标签、线条位于对数轴上的正确位置。我该怎么做?
理想情况下,我可以只使用命令行axvline(1.5),并且该行将位于正确的位置(距左侧 58%),但如果唯一的方法是在对数坐标和图像坐标之间手动转换,那也没关系.
对于线性轴,在对 imshow 的调用中使用 extents= 可以满足我的要求,但我没有看到用对数轴做同样事情的方法。
例子:
from matplotlib.colors import LogNorm
x = logspace(log10(10), log10(1000), 5)
imshow(vstack((x,x)), extent=[10, 1000, 0, 100], cmap='gray', norm=LogNorm(), interpolation='nearest')
axvline(100, color='red')
这个例子不起作用,因为extent=只适用于线性刻度,所以在100处做axvline时,它不会出现在中心。我希望 x 轴显示 10、100、1000 和 axvline(100),以便在 100 点的中心放置一条线,同时像素保持等距。
【问题讨论】:
-
您能否提供一些您想要实现的工作代码或图像。另一个问题是您是否灵活地使用 pcolor 代替 imshow。
-
@imsc:添加了一个示例。我认为 pcolor 很好。
标签: image plot matplotlib logarithm