如何在python中绘制多维数据点

时间:2015-01-13 19:53:35

标签: python matplotlib plot mfcc

首先背景:

我想绘制各种歌曲的梅尔频率倒谱系数并进行比较。 我在整首歌曲中计算MFCC,然后将它们平均得到13个系数的一个数组。我希望这能代表我绘制的图表上的一个点。

我是Python新手,对任何形式的绘图都很陌生(尽管我已经看过一些使用matplotlib的建议)。

我希望能够可视化这些数据。关于我如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:3)

首先,如果你想在图表中将13个系数的数组表示为单个点,那么你需要将13个系数分解为图表中的维数,正如颜燕在他的评论中指出的那样。 要将数据投影到2维,您可以自己创建相关指标,例如最大/最小/标准偏差/ ....或者应用降维等方法,如PCA。 是否这样做以及如何这样做是另一个话题。

然后,绘图很简单,就像这里一样: http://matplotlib.org/api/pyplot_api.html

我提供了此解决方案的示例代码:

import matplotlib.pyplot as plt
import numpy as np

#fake example data
song1 = np.asarray([1, 2, 3, 4, 5, 6, 2, 35, 4, 1])
song2 = song1*2
song3 = song1*1.5

#list of arrays containing all data
data = [song1, song2, song3]

#calculate 2d indicators
def indic(data):
    #alternatively you can calulate any other indicators
    max = np.max(data, axis=1)
    min = np.min(data, axis=1)
    return max, min

x,y = indic(data)
plt.scatter(x, y, marker='x')
plt.show()

结果如下: enter image description here

然而,我想为您的潜在问题提出另一种解决方案,即:绘制多维数据。 我建议使用一些parralel坐标图,它可以使用相同的伪数据构建:

import pandas as pd
pd.DataFrame(data).T.plot()
plt.show()

然后结果显示沿x轴的每首歌曲的所有系数和沿y轴的值。我看起来如下: enter image description here