matplotlib- Y和X轴交换

时间:2014-01-15 17:35:50

标签: python audio matplotlib plot

我正在尝试绘制频谱图。我在matplotlib中使用imshow

问题在于,我正在从C ++生成的文本文件中读取数据(它实际上创建了一个2D矢量并将其存储到文本文件中)然后我在文本文件和绘图中读取。

下面是我生成的图表的输出(来自C ++并导入到python中):

enter image description here

这是谱图的图,实际上是Python(使用matplotlib):

enter image description here

正如您所看到的,交换了x轴和y轴,这给了我实际频谱图的错误形状。

为什么会这样?例如,我是否可以首先阅读错误的数据并且这已经发生了?或者,我可能不是设置x,y轴本身吗?

非常感谢任何帮助

编辑:

我使用这个函数读取数组:

def split_at_empty_lines(filename):

with open(filename) as f:
    arr = [] 
    for line in f:
        if not line.strip() and arr:
            yield arr 
            arr = []
        elif line.strip(): arr.extend(float(x) for x in line.split())
    if arr: yield arr;

通过执行以下操作生成频谱图:

a = list(split_at_empty_lines("file.txt"); 

hm = ax.imshow(a, interpolation='nearest',origin='lower',aspect='auto')

结果如下:

[[ 26.9287  30.9089  34.9285 ...,  23.016   28.9027  36.4073]
 [ 26.7964  26.8524  32.7296 ...,  22.9524  28.6145  33.7204]
 [ 26.4222  27.0941  29.094  ...,  22.5309  27.6803  26.7073]
..., 
[ 25.9362  25.8307  29.7039 ...,  22.0084  25.9855  28.9602]
[ 26.4222  27.0941  29.094  ...,  22.5309  27.6803  26.7073]
[ 26.7964  26.8524  32.7296 ...,  22.9524  28.6145  33.7204]]

结果如下:

enter image description here

我不知道为什么我会得到如此不同的结果。

1 个答案:

答案 0 :(得分:2)

如果您正在使用numpy将数据读入ndarray,则可以在绘图之前转置数组。

import numpy as np
a = np.array(split_at_empty_lines("file.txt"))
print(a.T)

应该产生

array([[1, 4],
       [2, 5],
       [3, 6]])