从数组绘制特定数据集 - Python

时间:2015-04-28 10:49:46

标签: python arrays multidimensional-array

问题

我是一名物理学家,数据由4个numpy.ndarrays组成,长度相等(我拥有的数据很大,len~75k)。我正在寻找一种方法来对数组中的数据进行排序和绘制。

我们假设我的数组类似于下面的A,B,C,D

A = [1,2,3,1,2,3,1,2,3,1,2,3]
B = [1,1,1,2,2,2,1,1,1,2,2]
C = [1,1,1,1,1,1,2,2,2,2,2]
D = [5,6,3,6,3,5,2,4,6,8,7,9]

我们现在说我想做一个A,D,B' for each value of C`的3D情节。我怎么能自动化呢?

选择解决方案

在RickardSjogren的帮助下,我编写了以下代码,为每个C值绘制并保存每个数据系列。

fig = plt.figure()
C_unique = np.unique(C)

for c in zip(C_unique):
    ax = axes(projection='3d')    
    ax.scatter(A[C == c], D[C == c], B[C == c])
    ax.set_xlabel('A')
    ax.set_ylabel('D')
    ax.set_zlabel('B')
    ax.set_title('C = '+str(c))
    savefig(saveDirectory+'/'+str(c))
    clf()

1 个答案:

答案 0 :(得分:2)

您可以使用Matplotlib进行3D绘图。从文档中你只需:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')

并使用ax引用的Axes3D对象的绘图方法。

将数据用于任意数量的C值的示例:

import numpy as np

A = [1,2,3,1,2,3,1,2,3,1,2]
B = [1,1,1,2,2,2,1,1,1,2,2]
C = [1,1,1,1,1,1,2,2,2,2,2]
D = [5,6,3,6,3,5,2,4,6,8,7]
A, B, C, D = map(np.array, [A, B, C, D])

fig = plt.figure()
c_unique = np.unique(C)
fig.set_size_inches(4 * len(c_unique), 4)

# Add axis for each unique C-value.
axes = [fig.add_subplot(1, len(c_unique), i + 1, projection='3d') for i, _ in enumerate(c_unique)]

for c, ax in zip(c_unique, axes):
    # Use boolean indexing of numpy-arrays to plot values for current C.
    ax.scatter(A[C == c], B[C == c], D[C == c])

    ax.set_xlabel('A')
    ax.set_ylabel('B')
    ax.set_zlabel('D')
    ax.set_title('C = {}'.format(c))

fig.tight_layout()

结果:

3D plot