尽管数据采样不均匀,如何使 yscale 统一显示图像?
How to make yscale uniform to display an image, despite uneven data sampling?
我有一个二维数组,我想将其显示为图像。尺寸为 Y x X(log tau vs arcsec)。
问题是 y 轴 (log tau) 采样不均匀。 y轴的范围是[1.17,-8],但是1.17到-4之间的点很少,-4到-8之间的点更多。因此,使用直接 imshow 方法将绘制 1.17 到 -4 更少(在我的例子中是 1/3)space 和 -4 到 -8 更多 space (2/3).
正如您在下面的代码中看到的,根据数据,y 刻度是不均匀的。我也想在 y 轴上绘制一个统一的线性比例尺。
我想要一些代码建议在这里 squeeze/stretch 点在 y 轴上,这样 y 刻度是等距的。
我的代码:
## The shape of data is (log tau, arcsec) is (150, 50).
plt.imshow(data, cmap='gray', origin='lower')
plt.xticks([10, 20, 30, 40], [623.5, 623.87, 624.25, 624.63], rotation=45)
plt.yticks([50, 106, 124, 131], [-6, -4, -2, -1]) ## want some code suggestion here to squeeze / stretch points in y-axis such that, y-ticks are equidistant.
plt.gca().set_aspect(1.0 / plt.gca().get_data_ratio(), adjustable='box') ## to make square plot
plt.colorbar()
plt.show()
对于不均匀的数据,可以将imshow()
替换为pcolor()
(或pcolormesh()
)。 pcolor()
接受 x 和 y 位置数组作为参数。这些位置标记每个单元格的 边界 。请注意,在每个方向上,将有一个边界多于 2D 数据中值的数量(因此 51
x 位置和 151
y 位置 150x50
数据)。
这是一些示例代码:
from matplotlib import pyplot as plt
import numpy as np
tau = np.linspace(*np.power(10, [-8, 1.17]), 151)
y = np.log(tau)
x = np.linspace(623.12, 625, 51)
data = np.random.rand(150, 50)
plt.pcolor(x, y, data, cmap='inferno')
plt.show()
注意 tau
也可以直接使用,y 轴重新缩放为 log-space。在任何情况下,刻度都将显示为常规绘图。可以应用多种locators and/or formatters。
plt.pcolor(x, tau, data, cmap='inferno')
plt.yscale('log')
我有一个二维数组,我想将其显示为图像。尺寸为 Y x X(log tau vs arcsec)。
问题是 y 轴 (log tau) 采样不均匀。 y轴的范围是[1.17,-8],但是1.17到-4之间的点很少,-4到-8之间的点更多。因此,使用直接 imshow 方法将绘制 1.17 到 -4 更少(在我的例子中是 1/3)space 和 -4 到 -8 更多 space (2/3).
正如您在下面的代码中看到的,根据数据,y 刻度是不均匀的。我也想在 y 轴上绘制一个统一的线性比例尺。
我想要一些代码建议在这里 squeeze/stretch 点在 y 轴上,这样 y 刻度是等距的。
我的代码:
## The shape of data is (log tau, arcsec) is (150, 50).
plt.imshow(data, cmap='gray', origin='lower')
plt.xticks([10, 20, 30, 40], [623.5, 623.87, 624.25, 624.63], rotation=45)
plt.yticks([50, 106, 124, 131], [-6, -4, -2, -1]) ## want some code suggestion here to squeeze / stretch points in y-axis such that, y-ticks are equidistant.
plt.gca().set_aspect(1.0 / plt.gca().get_data_ratio(), adjustable='box') ## to make square plot
plt.colorbar()
plt.show()
对于不均匀的数据,可以将imshow()
替换为pcolor()
(或pcolormesh()
)。 pcolor()
接受 x 和 y 位置数组作为参数。这些位置标记每个单元格的 边界 。请注意,在每个方向上,将有一个边界多于 2D 数据中值的数量(因此 51
x 位置和 151
y 位置 150x50
数据)。
这是一些示例代码:
from matplotlib import pyplot as plt
import numpy as np
tau = np.linspace(*np.power(10, [-8, 1.17]), 151)
y = np.log(tau)
x = np.linspace(623.12, 625, 51)
data = np.random.rand(150, 50)
plt.pcolor(x, y, data, cmap='inferno')
plt.show()
注意 tau
也可以直接使用,y 轴重新缩放为 log-space。在任何情况下,刻度都将显示为常规绘图。可以应用多种locators and/or formatters。
plt.pcolor(x, tau, data, cmap='inferno')
plt.yscale('log')