2014-06-09 37 views
5

bazı veri noktaları (x, y, z, yarıçap) ile serpme çizim yapmaya çalışıyorum küreler ve bu kadar şimdi benim sonucudur:Dağılım etiketlerle Plot 3D ve

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

x = np.random.rand(20) 
y = np.random.rand(20) 
z = np.random.rand(20) 
r = np.random.rand(20) 


plt.rc('text', usetex=True) 
plt.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"] 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

ax.scatter(x, y, z, s=np.pi*r**2*100, c='blue', alpha=0.75) 

ax.set_xlabel(r'$x$ $\left[\frac{\text{Mpc}}{h}\right]$') 
ax.set_ylabel(r'$y$ $\left[\frac{\text{Mpc}}{h}\right]$') 
ax.set_zlabel(r'$z$ $\left[\frac{\text{Mpc}}{h}\right]$') 

#plt.savefig('spheres.png') 

plt.show() 

http://www.file-upload.net/download-9033814/spheres.png.html

X ve y etiketlerinin tikleriyle çakışmaması için bu çizimi nasıl geliştirebilirim?

Ve bu 3D-grafikte alanlar yerine küreler yapmak için bir olasılık var mı?

cevap

8

here açıklandığı gibi her konumda bir tane çizerek, daire işaretçileri yerine küreler kullanan bir çizim oluşturabilirsiniz. İşte bir örnek:

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

def drawSphere(xCenter, yCenter, zCenter, r): 
    #draw sphere 
    u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j] 
    x=np.cos(u)*np.sin(v) 
    y=np.sin(u)*np.sin(v) 
    z=np.cos(v) 
    # shift and scale sphere 
    x = r*x + xCenter 
    y = r*y + yCenter 
    z = r*z + zCenter 
    return (x,y,z) 


x = 10*np.random.rand(20) 
y = 10*np.random.rand(20) 
z = 10*np.random.rand(20) 
r = np.random.rand(20) 


fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

# draw a sphere for each data point 
for (xi,yi,zi,ri) in zip(x,y,z,r): 
    (xs,ys,zs) = drawSphere(xi,yi,zi,ri) 
    ax.plot_wireframe(xs, ys, zs, color="r") 


plt.show() 

spheres in 3D plot

tarif here olarak ikinci bir satır ekleyerek etiket konumlandırma sorunu deneyin düzeltmek için.

+0

Etiket sorunu Ben bir şekilde çözemiyorum çünkü Lateks yazı tipi kullanıyorum ... ama tel kafes fikri için teşekkürler! – Andy

İlgili konular