2016-11-07 2 views
1

Ich bin auf der Suche nach eine Handlung ähnlich der found here, mit dem einfachen Unterschied, den ich möchte, um den Abstand von der Mitte für jeden Punkt zu setzen. Dh, ein Stück der Handlung ist ein Kreis, wo ich möchte, dass jeder der Punkte in einer definierbaren Entfernung von der Mitte ist.Matplotlib: Plot 2D-Array radial zu machen 3d Scatterplot

Was ich ab, eine einfache Modifikation der zuvor erwähnten Antwort gegeben:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib 
import numpy as np 
from scipy.interpolate import interp1d 
from matplotlib import cm 
from matplotlib import pyplot as plt 
step = 0.04 
maxval = 1.0 
fig = plt.figure() 
ax = Axes3D(fig) 
# u here would define the desired distance from radial axis 
# u=np.array([0,1,2,1,0,2,4,6,4,2,1]) 
v=np.array([4,4,6,3,6,4,1,4,4,4,4]) 
r=np.array([0,1,2,3,4,5,6,7,8,9,10]) 
f=interp1d(r,u) 

# walk along the circle 
p = np.linspace(0,2*np.pi,len(r)) 
R,P = np.meshgrid(r,p) 
# transform them to cartesian system 
X,Y = R*np.cos(P),R*np.sin(P) 

Z=f(R) 

ax.scatter(X, Y, Z)#, rstride=1, cstride=1, cmap=cm.jet) 
ax.set_xticks([]) 
fig.savefig(str(output_prefix + '3d..png'), dpi=(200)) 

enter image description here Was würde ich (Entschuldigung für die unscharfe Skizze) zeichnen mag: enter image description here

I habe versucht, interp2d zu verwenden, um die u Variable, die oben kommentiert wurde, hinzuzufügen, aber kein Glück. Das Ändern von Z in das Array u hat den Fehler verursacht, dass X, Y und Z die gleiche Größe haben müssen ("Argument 'zs' must be of same size as 'xs' ", verständlicherweise, da X und Y jetzt interpoliert sind). Was muss ich tun? Irgendwelche Tipps würden geschätzt!

Antwort

0

Ich weiß nicht genau, was Sie in Ihrer Frage gemeint haben. Ich machte v, um den Versatz der Mitte der Kreise in X-Achse zu sein.

from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
from scipy.interpolate import interp1d 
from matplotlib import pyplot as plt 
step = 0.04 
maxval = 1.0 
fig = plt.figure() 
ax = Axes3D(fig) 
# v here would define the desired distance from radial axis 
u=np.array([0,1,2,1,0,2,4,6,4,2,1]) 
v=np.array([4,4,6,3,6,4,1,4,4,4,4]) 
r=np.array([0,1,2,3,4,5,6,7,8,9,10]) 
f=interp1d(r,u) 

# walk along the circle 
V = np.tile(v, (len(u), 1)) 
p = np.linspace(0,2*np.pi,len(r)) 
R,P = np.meshgrid(r,p) 
# transform them to cartesian system 
X,Y = V + R*np.cos(P),R*np.sin(P) 

Z=f(R) 

ax.scatter(X, Y, Z)#, rstride=1, cstride=1, cmap=cm.jet) 
ax.set_xticks([]) 
plt.show()