Ok, so I feel like there should be an easy way to create a 3-dimensional scatter plot using matplotlib. I have a 3D numpy array (dset) with 0’s where I don’t want a point and 1’s where I do, basically to plot it now I have to step through three for: loops as such:
for i in range(30):
for x in range(60):
for y in range(60):
if dset[i, x, y] == 1:
ax.scatter(x, y, -i, zdir='z', c= 'red')
Any suggestions on how I could accomplish this more efficiently? Any ideas would be greatly appreciated.
If you have a
dsetlike that, and you want to just get the1values, you could usenonzero, which “returns a tuple of arrays, one for each dimension ofa, containing the indices of the non-zero elements in that dimension.”.For example, we can make a simple 3d array:
and find where the nonzero elements are located:
If we wanted a more complicated cut, we could have done something like
(d > 3.4).nonzero()or something, as True has an integer value of 1 and counts as nonzero.Finally, we plot:
giving