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

Posted

技术标签:

【中文标题】如何在python中绘制多维数据点【英文标题】:How to plot a multi-dimensional data point in python 【发布时间】:2015-03-11 21:31:54 【问题描述】:

先介绍一下背景:

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

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

我希望能够可视化这些数据。关于我如何去做这件事的任何想法?

【问题讨论】:

首先,您必须考虑如何在视频平面中表示 (x1,...,x13) 点....之后您就可以开始了。那不是python的问题……我认为没有任何语言可以解决它。 您必须先投影到 2D。然后你的情节看起来像一个 3D 情节(但它实际上在屏幕上,无论如何都是 2D 的)。 如果它仍然相关,我建议查看 RadViz 库和函数:例如pandas.pydata.org/docs/reference/api/… 【参考方案1】:

首先,如果您想将 13 个系数的数组表示为图表中的一个点,那么您需要将 13 个系数分解为图表中的维数,正如 yan king yin 在他的评论中指出的那样。 要将数据投影到二维中,您可以自己创建相关指标,例如最大/最小/标准偏差/....,或者应用降维方法,例如 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()

结果如下所示:

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

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

然后,结果会沿 x 轴显示每首歌曲的所有系数,沿 y 轴显示它们的值。我看起来如下:

更新:

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

Radar chart

Parallel plot

【讨论】:

有没有其他方法可以分散高亮度数据?此外,由于 x 轴上的名称,使用 pandas Dataframe 的绘图很少出错。

以上是关于如何在python中绘制多维数据点的主要内容,如果未能解决你的问题,请参考以下文章

c++:如何使用 sdl 将位图加载到 opengl 中的多维数据集中?

如何在 Python 中可视化多维集群?

如何在 matplotlib 上绘制散点趋势线? Python-熊猫

如何在 sklearn Python 中绘制 SVM 决策边界?

绘制矩形多维数组

如何在python中绘制一条线,每个数据点都有一个间隔