使用matplotlib可视化10维数据

时间:2016-10-29 10:21:04

标签: python numpy matplotlib data-science

我有这样的数据:

ID    x1   x2   x3    x4    x5    x6    x7   x8   x9   x10
1   -0.18   5 -0.40 -0.26  0.53 -0.66  0.10   2 -0.20    1
2   -0.58   5 -0.52 -1.66  0.65 -0.15  0.08   3  3.03   -2
3   -0.62   5 -0.09 -0.38  0.65  0.22  0.44   4  1.49    1
4   -0.22  -3  1.64 -1.38  0.08  0.42  1.24   5 -0.34    0
5    0.00   5  1.76 -1.16  0.78  0.46  0.32   5 -0.51   -2

什么是可视化此数据的最佳方法,我使用matplotlib对其进行可视化,并使用pandas从csv中读取它

感谢

2 个答案:

答案 0 :(得分:15)

在高维空间中可视化数据始终是一个难题。常用的一种解决方案(and is now available in pandas)是检查数据的所有1D和2D投影。它没有提供有关数据的所有信息,但除非您能在10D中看到,否则无法进行可视化!这是一个如何使用pandas(版本0.7.3向上)执行此操作的示例:

import numpy as np 
import pandas as pd
from pandas.tools.plotting import scatter_matrix

#first make some fake data with same layout as yours
data = pd.DataFrame(np.random.randn(100, 10), columns=['x1', 'x2', 'x3',\
                    'x4','x5','x6','x7','x8','x9','x10'])

#now plot using pandas 
scatter_matrix(data, alpha=0.2, figsize=(6, 6), diagonal='kde')

这将生成一个图表,其中所有2D投影都是散点图,以及一维投影的KDE直方图:

enter image description here

我在my github page上也有一个纯粹的matplotlib方法,它产生一种非常相似的绘图类型(它是为MCMC输出设计的,但在这里也是合适的)。这是你在这里使用它的方式:

import corner_plot as cp

cp.corner_plot(data.as_matrix(),axis_labels=data.columns,nbins=10,\
              figsize=(7,7),scatter=True,fontsize=10,tickfontsize=7)

enter image description here

答案 1 :(得分:0)

您可以随时更改绘图,对于您绘制不同"维度的每个瞬间"数据帧。 这里有一个关于如何绘制随时间变化的绘图的示例,您可以根据自己的需要进行调整

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
plt.grid(True)
plt.hold(False)
x = np.arange(-3, 3, 0.01)

for n in range(15):
    y = np.sin(np.pi*x*n) / (np.pi*x*n)
    line, = ax.plot(x, y)
    plt.draw()
    plt.pause(0.5)