График Python 4D с использованием matplotlib - путаница при чтении и построении массива - PullRequest
0 голосов
/ 02 октября 2018

У меня есть список как ниже -

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, с3]].Я использовал 4D график с цветом 4 с [c1, c2, c3].Я застрял в заговоре.Я хотел бы иметь цвет для c1 в координатах [x1, y1, z1] и аналогично другим координатам.

Я использовал следующие методы -

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 я пытался построить итеративно, но он выдает ошибку 'float object unsubscriptable'.

Так может кто-нибудь сказать мне, где я иду не так.Или есть другой способ сделать это?

1 Ответ

0 голосов
/ 02 октября 2018

Это один из способов сделать это путем преобразования вашего списка в массив, который позволяет вам разрезать все элементы напрямую в виде координат 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

...