2016-04-10 51 views
9

我想繪製一個高分辨率的surface_plot,但我也很喜歡它上面的一些漂亮的網格線。如果我在相同的參數中使用網格線Python:Matplotlib Surface_plot

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

我得到了很多網格線。另一方面,如果我將「rstride」和「cstride」設置爲更高的值,我的球體將會變得很難看。

然後我試圖砸碎

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

,但它只是在於對彩色球的頂部..這意味着我可以看到線框的背面,然後這一切的背後的surface_plot。

有沒有人試過嗎?

另一個選擇是使用「底圖」,它可以創建一個很好的網格,但是接下來我將不得不調整我的彩色表面。

我的情節是這樣的: surface_plot

如果我邊用更高的 「rstride」 和 「cstride」 添加到地圖中,然後它看起來像這樣:

enter image description here

代碼:

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

我想顯示圍繞球體的\ theta和\ phi角度..也許相隔30度。

乾杯! Morten

+0

你將發佈你的陰謀? – Hun

回答

2

看起來您可能需要使用底圖。使用plot_surface(),您可以獲得高分辨率繪圖或低分辨率,頂部有良好的網格。但不是兩個。我只是製作了一個帶有等高線圖的簡單底圖。我認爲你可以輕鬆地將pcolor應用於它。只是不要畫大陸和國家的邊界​​。然後,你有一個很好的球體可以提供更多的控制。在製作完情節之後,您可以輕鬆地在其上添加網格。

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

這可能不是你想要的。但我只是給你一個新的可能性。您可以獨立控制圖的分辨率和網格間隔。 – Hun