当我试图了解imshowpcolormesh之间的区别时,遇到了无法确定原因的问题。

例如,我有一个频率为10kHz的正弦波

import numpy as np
import matplotlib.pyplot as plt
from scipy import fft

f = 10000  # Frequency, in cycles per second, or Hertz
fs = 44100  # Sampling rate, or number of measurements per second

t = np.linspace(0, 5, 5 * fs, endpoint=False)
X = np.sin(f * 2 * np.pi * t)


在此信号上应用fft会得到频谱图Xs

window_size = 2048  # 2048-sample fourier windows
stride = 512        # 512 samples between windows
wps = fs/float(512) # ~86 windows/second
Xs = np.empty([int(2*wps),2048])

for i in range(Xs.shape[0]):
    Xs[i] = np.abs(fft(X[i*stride:i*stride+window_size]))


现在,我想用Xsimshow绘制频谱图pcolormesh

展示

fig = plt.figure(figsize=(20,7))
plt.imshow(Xs.T,aspect='auto',cmap='seismic')
plt.gca().invert_yaxis()
plt.colorbar()


python - imshow和pcolormesh使用相同的输入显示两个不同的输出-LMLPHP

pcolormesh

fig = plt.figure(figsize=(20,7))
plt.pcolormesh(Xs.T,cmap='seismic')
plt.colorbar()


python - imshow和pcolormesh使用相同的输入显示两个不同的输出-LMLPHP

他们为什么不同?

最佳答案

有趣的是,添加参数dpi可以解决问题。即使设置dpi=100(如果未指定dpi参数也将使用默认值),该问题仍将得到解决。

展示

fig = plt.figure(figsize=(20,7), dpi=100)
plt.imshow(Xs.T,aspect='auto',cmap='seismic')
plt.gca().invert_yaxis()
plt.colorbar()


python - imshow和pcolormesh使用相同的输入显示两个不同的输出-LMLPHP

尽管dpi参数解决了问题,但我仍不清楚其背后的原因。欢迎任何其他建议。

关于python - imshow和pcolormesh使用相同的输入显示两个不同的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56336780/

10-12 16:36