使用 imshow 时的 xticks 和 yticks 问题
xticks and yticks issues while using imshow
我在修复 imshow
图的 xticks
和 yticks
时遇到问题。当我为 imshow
使用单个图时,范围效果更好(见下面的第一张图)。但是,当我使用在 imshow
图上插入局部最大值的坐标时,刻度已经改变(第二个图)。有人能帮我在绘制局部最大值后修复 xticks
和 yticks
吗?
import numpy as np
import matplotlib.pyplot as plt
from skimage.feature import peak_local_max
# Input of a 2D array/
data = np.real(data) # data link : https://www.file.io/LvDn/download/WqdRCoW2dUPV
# Find the coordinates of local maxima in the data
coordinates = peak_local_max(data, min_distance=8, num_peaks=2) #, threshold_abs = 0.0004) #
# Display results
kf=2*2*np.pi/10
resolution = 40
N=9
kx = np.linspace(-kf, kf, N * resolution) # space vector
ky = np.linspace(-kf, kf, N * resolution) # space vector
fig, axes = plt.subplots(1, 2, figsize=(13, 8), sharex=True, sharey=True)
ax = axes.ravel()
ax[0].imshow(data, cmap='seismic', vmin=data.min(), vmax=data.max(),
extent=[kx.min(), kx.max(), ky.min(), ky.max()],
interpolation='nearest', origin='lower')
ax[0].axis('on')
ax[0].set_title('Original')
上面的代码片段生成了这个图:
在这里,imshow extent 工作正常,这是我想要的。当我使用脚本绘制局部最大值时,刻度将如下所示更改。
ax[1].imshow(data, cmap='seismic')
ax[1].autoscale(False)
ax[1].plot( coordinates[:, 1], coordinates[:, 0], 'k.', marker='o', markersize=12)
ax[1].axis('on')
ax[1].set_title('Peak_local_max')
fig.tight_layout()
plt.show()
[
如何修复“峰值局部最大值”图中的 xticks
和 yticks
?
如果我使用第二个情节的脚本范围,那么图形如下所示:
很难确定您要的是什么,而且您提供的示例代码不起作用。例如 spec
等变量未定义。
但我猜主要问题是您混合了像素(来自 peak_local_max
)和数据坐标。您可以使用以下方法修复:
extent = [kx.min(), kx.max(), ky.min(), ky.max()]
fig, ax = plt.subplots(1, 2, figsize=(13, 8), sharex=True, sharey=True)
ax[0].set_title('Original')
ax[0].imshow(data, cmap='seismic', extent=extent)
ax[1].set_title('Peak_local_max')
ax[1].imshow(data, cmap='seismic', extent=extent)
ax[1].plot(kx[coordinates[:, 1]], ky[coordinates[:, 0]], 'go', markersize=12)
Matplotlib用的extent应该也是outer extent,我不确定你的坐标数组kx
和ky
到底是不是这样。这可能会导致 mismatch/shift 分辨率的一半。
我在修复 imshow
图的 xticks
和 yticks
时遇到问题。当我为 imshow
使用单个图时,范围效果更好(见下面的第一张图)。但是,当我使用在 imshow
图上插入局部最大值的坐标时,刻度已经改变(第二个图)。有人能帮我在绘制局部最大值后修复 xticks
和 yticks
吗?
import numpy as np
import matplotlib.pyplot as plt
from skimage.feature import peak_local_max
# Input of a 2D array/
data = np.real(data) # data link : https://www.file.io/LvDn/download/WqdRCoW2dUPV
# Find the coordinates of local maxima in the data
coordinates = peak_local_max(data, min_distance=8, num_peaks=2) #, threshold_abs = 0.0004) #
# Display results
kf=2*2*np.pi/10
resolution = 40
N=9
kx = np.linspace(-kf, kf, N * resolution) # space vector
ky = np.linspace(-kf, kf, N * resolution) # space vector
fig, axes = plt.subplots(1, 2, figsize=(13, 8), sharex=True, sharey=True)
ax = axes.ravel()
ax[0].imshow(data, cmap='seismic', vmin=data.min(), vmax=data.max(),
extent=[kx.min(), kx.max(), ky.min(), ky.max()],
interpolation='nearest', origin='lower')
ax[0].axis('on')
ax[0].set_title('Original')
上面的代码片段生成了这个图:
在这里,imshow extent 工作正常,这是我想要的。当我使用脚本绘制局部最大值时,刻度将如下所示更改。
ax[1].imshow(data, cmap='seismic')
ax[1].autoscale(False)
ax[1].plot( coordinates[:, 1], coordinates[:, 0], 'k.', marker='o', markersize=12)
ax[1].axis('on')
ax[1].set_title('Peak_local_max')
fig.tight_layout()
plt.show()
[
如何修复“峰值局部最大值”图中的 xticks
和 yticks
?
如果我使用第二个情节的脚本范围,那么图形如下所示:
很难确定您要的是什么,而且您提供的示例代码不起作用。例如 spec
等变量未定义。
但我猜主要问题是您混合了像素(来自 peak_local_max
)和数据坐标。您可以使用以下方法修复:
extent = [kx.min(), kx.max(), ky.min(), ky.max()]
fig, ax = plt.subplots(1, 2, figsize=(13, 8), sharex=True, sharey=True)
ax[0].set_title('Original')
ax[0].imshow(data, cmap='seismic', extent=extent)
ax[1].set_title('Peak_local_max')
ax[1].imshow(data, cmap='seismic', extent=extent)
ax[1].plot(kx[coordinates[:, 1]], ky[coordinates[:, 0]], 'go', markersize=12)
Matplotlib用的extent应该也是outer extent,我不确定你的坐标数组kx
和ky
到底是不是这样。这可能会导致 mismatch/shift 分辨率的一半。