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

Cat*_*ord 8 python plot matplotlib mfcc

一些背景优先:

我想绘制各种歌曲的Mel-Frequency Cepstral Coefficients并对它们进行比较.我在一首歌中计算MFCC,然后将它们平均得到一个13个系数的数组.我希望这能代表我绘制的图表上的一个点.

我是Python新手,对任何形式的绘图都很陌生(虽然我已经看到了一些使用matplotlib的建议).

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

Nik*_*ble 6

首先,如果要将13个系数的数组表示为图形中的单个点,则需要将这13个系数分解为图形中的维数,就像yan king yin的评论中指出的那样。要将数据投影到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()
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样: 在此处输入图片说明

但是我想为您的基本问题提出另一种解决方案,即:绘制多维数据。我建议使用可以用相同的伪数据构造的平行坐标坐标图:

import pandas as pd
pd.DataFrame(data).T.plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)

然后结果沿x轴显示每首歌曲的所有系数,并沿y轴显示它们的值。我看起来如下: 在此处输入图片说明

更新:

同时,我发现了Python Image Gallery,其中包含两个不错的带有参考代码的高维可视化示例:

在此处输入图片说明

在此处输入图片说明