【问题标题】:How to make a spectrum plot如何制作频谱图
【发布时间】:2022-12-01 03:37:40
【问题描述】:

我正在尝试使用 Python 和 Matlab 复制如下图所示的频谱图,到目前为止没有成功。

图片来自Electric Field Instrument资料

数据是一个二维矩阵,每一行代表时间戳,列代表FFT后的不同频率。问题是数据有很多 NaN 值,只有少数频率有数据,当我使用 plt.imshow() 时,它给我完全空白的图像。此外,值范围从1e-12 to 1e-7,非常小。

任何关于如何可视化图像的提示都将不胜感激。

数据截图。数据来自 NASA EFI 数据。

我在 Python 中使用 plt.imshow,在 Matlab 中使用 imagesc 和 who 2d 矩阵,它给我相同颜色的空白图像。 下面是我的 Python 代码试用,都给了我错误的图像:

plt.matshow(dt, cmap='jet');plt.colorbar(); plt.show()

for i in range(dt.shape[0]):
      plt.plot(dt.iloc[i, :]);plt.show()

【问题讨论】:

  • 请提供数据样本。如果您需要帮助弄清楚为什么您的代码不起作用,也请将您的代码显示为 minimal reproducible example

标签: python spectrum


【解决方案1】:

您不应该使用 imshow,因为这会将其显示为图像(因为您有一个二维矩阵)。

您需要分别绘制每一行,如下所示:

import numpy as np
import matplotlib.pyplot as plt

sin1 = np.sin(np.linspace(0, 2*np.pi, 100))
sin2 = np.sin(np.linspace(0, 2*np.pi, 100)) + 0.5
sin3 = np.sin(np.linspace(0, 2*np.pi, 100)) + 1

sin1[10] = np.nan
sin2[20] = np.nan
sin3[30] = np.nan

data = np.array([sin1, sin2, sin3])

# plot each row as a separate series
for i in range(data.shape[0]):
    plt.plot(data[i, :])

plt.show()

然后 nan 应该只是图中的空点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2017-09-08
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多