spnsp
spnsp

Reputation: 163

Python 4D plot using matplotlib- confusion in reading and plotting the array

I have a list like below -

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

This represents co-ordinates- [[x1,y1,z1,c1],[x2,y2,z2,c2],[x3,y3,z3,c3]]. I used 4D plot with 4th dimension[c1,c2,c3] being the color. I am stuck at plotting. I would like to have a color for c1 at co-ordinates [x1,y1,z1] and similarly to other co-ordinates.

I used the below methods -

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()

The problem in method 1 is, its not plotting all the elements of the list. I guess there is a mistake in executing append. I am not getting any errors but its just not plotting every data.

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()

So in method 2, I tried to plot iteratively but its giving me 'float object unsubscriptable' error.

So can somebody tell me where I am going wrong. Or is there any other method to do this ?

Upvotes: 2

Views: 204

Answers (1)

Sheldore
Sheldore

Reputation: 39052

This is one way of doing it by converting your list to array which allows you to slice all the elements directly as x, y, z and color coordinates.

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

Upvotes: 1

Related Questions