Dispersión Plot 3D con tags y esferas.

Estoy tratando de hacer un diagtwig de dispersión con algunos puntos de datos (x, y, z, radio) y este es mi resultado hasta ahora:

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

¿Cómo puedo mejorar esta gráfica para que no se superpongan las tags xey con los tics?

¿Y existe la posibilidad de hacer esferas en lugar de áreas en este diagtwig 3D?

Puede crear una gráfica que use esferas en lugar de marcadores circulares dibujando una en cada ubicación como se describe aquí . Aquí hay un ejemplo:

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

esferas en la trama 3D

Para solucionar el problema de posicionamiento de la etiqueta, intente agregar una segunda línea como se describe aquí .