问题
我是一名物理学家,数据由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()
答案 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()
结果: