使用matplotlib进行Python 4D绘图-读取和绘制数组时出现混乱

时间:2018-10-02 06:46:20

标签: python matplotlib scatter-plot

我有一个如下列表-

array1 = [[1,2,3,0.56],[12,5,30,0.23],[10,12,17,89.65]]

这代表坐标-[[x1,y1,z1,c1],[x2,y2,z2,c2],[x3,y3,z3,c3]]。 我使用了第4维[c1,c2,c3]作为颜色的4D图。我被困在密谋。我想在坐标[x1,y1,z1]和其他坐标上为c1颜色。

我使用了以下方法-

import matplotlib.pyplot as plt
import numpy as np

1) for p in range(len(array1)-1):
         x = np.append([array1[p][0]], array1[p+1][0])
         y = np.append([array1[p][1]], array1[p+1][1])
         z = np.append([array1[p][2]], array1[p+1][2])
         c = np.append([array1[p][3]], array1[p+1][3])
   fig = plt.figure()
   ax = fig.gca(projection='3d')
   ax.scatter(x,y,z,c=c,cmap = cmap)
   plt.show()

方法1中的问题是,它没有绘制列表的所有元素。我猜在执行添加时出错。我没有收到任何错误,但只是没有绘制所有数据。

2) fig = plt.figure()
    ax = fig.gca(projection='3d')

    for p in range(len(array1)-1):
        ax.scatter(array1[p][0],array1[p][1],array1[p][2],array1[p][3],cmap = 
         cmap)
    plt.show()

因此,在方法2中,我尝试进行迭代绘制,但它给了我“无法下标浮动对象”错误。

所以有人可以告诉我我要去哪里了。还是有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

这是通过将列表转换为数组来实现的一种方法,该方法允许您将所有元素直接切片为x,y,z和颜色坐标。

import matplotlib.cm as cm
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')

new_array = = np.array(array1)
ax.scatter(new_array[:,0],new_array[:,1],new_array[:,2], c=new_array[:,3], cmap=cm.RdBu, s=100)

enter image description here