2014-06-09 13 views
5

मैं कुछ डेटा बिंदुओं (एक्स, वाई, जेड, त्रिज्या) के साथ एक बिखराव साजिश बनाने के लिए कोशिश कर रहा हूँ और यह मेरा परिणाम पर निर्भर है:लेबल के साथ स्कैटर प्लॉट 3 डी और क्षेत्रों

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

मैं इस प्लॉट को कैसे सुधार सकता हूं ताकि एक्स-वाई-लेबल्स के साथ कोई ओवरलैप न हो?

और इस 3 डी-प्लॉट के क्षेत्रों के बजाय गोलाकार करने की संभावना है?

उत्तर

8

आप एक प्लॉट बना सकते हैं जो here वर्णित प्रत्येक स्थान पर एक को चित्रित करके सर्कल मार्करों के बजाय गोलाकारों का उपयोग करता है। यहाँ एक उदाहरण है:

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

ठीक करने के लिए लेबल पोजीशनिंग समस्या वर्णित here के रूप में एक दूसरी पंक्ति जोड़ने का प्रयास करें।

+0

लेबल समस्या मैं किसी भी तरह हल नहीं कर सकता, क्योंकि मैं लेटेक्स-फ़ॉन्ट का उपयोग करता हूं ... लेकिन वायरफ्रेम विचार के लिए धन्यवाद! – Andy

संबंधित मुद्दे