2016-04-10 20 views
9

Sto provando a tracciare un surface_plot ad alta risoluzione, ma mi piacerebbe anche avere delle belle linee di griglia su di esso. Se uso le griglie nello stesso argomentoPython: Matplotlib Surface_plot

ax.plot_surface(x_itp, y_itp, z_itp, rstride=1, cstride=1, facecolors=facecolors, linewidth=0.1) 

Ottengo un sacco di linee della griglia. Se io, d'altra parte, imposto "rstride" e "cstride" a valori più alti, la mia sfera diventerà brutta.

Ho poi cercato di distruggere una

ax.plot_wireframe(x_itp, y_itp, z_itp, rstride=3, cstride=3) 

in seguito, ma si trova proprio in cima alla sfera colorata .. nel senso che posso vedere il retro del wireframe e poi il surface_plot dietro a tutto.

Qualcuno ha provato questo?

Un'altra opzione era usare "mappa di base" che può creare una bella griglia, ma poi dovrò adattare la mia superficie colorata a quella.?!

mio trama assomiglia a questo: surface_plot

Se posso aggiungere bordi per la mappa con un più alto "rstride" e "cstride" allora assomiglia a questo:

enter image description here

codice:

norm = plt.Normalize() 
facecolors = plt.cm.jet(norm(d_itp)) 

# surface plot 
fig, ax = plt.subplots(1, 1, subplot_kw={'projection':'3d', 'aspect':'equal'}) 
ax.hold(True) 
surf = ax.plot_surface(x_itp, y_itp, z_itp, rstride=4, cstride=4, facecolors=facecolors) 
surf.set_edgecolors("black") 

Voglio mostrare gli angoli \ theta e \ phi intorno alla sfera .. forse con 30 gradi di distanza.

Cheers! Morten

+0

Vuoi pubblicare il tuo trama? – Hun

risposta

2

Sembra che potrebbe essere necessario utilizzare la mappa di base. Con plot_surface() puoi avere trama ad alta risoluzione o bassa risoluzione con una buona griglia in cima. Ma non entrambi. Ho appena creato una semplice mappa di base con la trama del contorno. Penso che si possa facilmente applicare PColor su di esso. Basta non disegnare il continente e il confine del paese. Quindi, hai una bella sfera che dà più controllo. Dopo aver creato la trama, puoi facilmente aggiungere una griglia.

from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
import numpy as np 

map = Basemap(projection='ortho',lat_0=45,lon_0=-150) 
map.drawmapboundary(fill_color='aquamarine') 
map.drawmeridians(np.arange(0,360,30)) # grid every 30 deg 
map.drawparallels(np.arange(-90,90,30)) 

nlats = 73; nlons = 145; delta = 2.*np.pi/(nlons-1) 
lats = (0.5*np.pi-delta*np.indices((nlats,nlons))[0,:,:]) 
lons = (delta*np.indices((nlats,nlons))[1,:,:]) 
wave = 0.6*(np.sin(2.*lats)**6*np.cos(4.*lons)) 
mean = 0.5*np.cos(2.*lats)*((np.sin(2.*lats))**2 + 2.) 

x, y = map(lons*180./np.pi, lats*180./np.pi) # projection from lat, lon to sphere 
cs = map.contour(x,y,wave+mean,15,linewidths=1.5) # contour data. You can use pcolor() for your project 
plt.title('test1') 
plt.show() 

contour plot on sphere using basemap

+0

Questo potrebbe non essere esattamente quello che vuoi. Ma ti sto solo dando una nuova possibilità. È possibile controllare in modo indipendente la risoluzione del grafico e gli intervalli di griglia. – Hun