2016-04-10 12 views
9

Yüksek çözünürlüklü bir yüzey grafiğini çizmeye çalışıyorum ama aynı zamanda üstündeki bazı güzel ızgara çizgilerini de beğeniyorum. i aynı değişkenPython: Matplotlib Surface_plot

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

çizgilerini kullanmak ben ızgara hatlarının çok olsun. Öte yandan, "rstride" ve "cstride" değerini daha yüksek değerlere ayarlarsam, kürem çirkinleşir.

Sonra sonradan bir

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

şut denedi, ama sadece ben tel kafesin ters ve sonra her şeyin arkasında surface_plot görebilirsiniz yani .. renkli küre üstünde yatıyor.

Bunu deneyen var mı?

Başka bir seçenek, güzel bir ızgara oluşturabilen "Basemap" ı kullanmaktı, ancak renkli yüzeyimi buna uyarlamak zorunda kaldım.

My arsa şöyle görünür:

enter image description here

kod: Ben daha yüksek bir "rstride" ve "cstride" ile haritaya kenarları eklerseniz o zaman şuna benzer surface_plot

:

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

ben ayrı .. belki ile 30 derece küre etrafında \ teta ve \ phi açıları göstermek istiyorum.

Şerefe! Morten

+0

Eğer arsa yayınlamak mı? – Hun

cevap

2

Baz harita kullanmanız gerekebilir. Plot_surface() ile yüksek çözünürlüklü çizim veya düşük çözünürlükte iyi ızgaraya sahip olabilirsiniz. Ama ikiside değil. Kontur çizimiyle basit bir taban haritası yaptım. Pcolor'u kolayca uygulayabileceğinizi düşünüyorum. Sadece kıta ve ülke sınırlarını çizmeyin. Sonra, daha fazla kontrol sağlayan güzel bir küreniz var. Parçanızı yaptıktan sonra üzerine kolayca ızgara ekleyebilirsiniz.

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

Bu, tam olarak istediğiniz gibi olmayabilir. Ama sana yeni bir olasılık veriyorum. Çizginin çözünürlüğünü ve ızgara aralıklarını bağımsız olarak kontrol edebilirsiniz. – Hun