私は世界のベースマップを持っていて、pcolormeshを使用してデータ(lintrends_mean)で満たされています。データには比較的大きなグリッドボックスがあるため、プロットを滑らかにしたいと思います。しかし、これを行う方法がわかりません。プロット関数でshading = 'gouraud'を設定すると、グリッドボックスのエッジがぼやけますが、データがまだにじみているように見えるので、それよりも見栄えを良くしたいのですが。
ここで同様の質問があり、回答が提示されましたが、特に「新しい深さ」がどこから来たのか、答えがわかりません。評判が足りないので、説明のためにコメントすることもできません。 matplotlib pcolorによる補間
#Set cmap properties
bounds = np.array([0.1,0.2,0.5,1,2,3,4,6,9,13,20,35,50])
norm = colors.LogNorm(vmin=0.01,vmax=55) #creates logarithmic scale
#cmap.set_under('#000099') # I want to use this- edit in Paint
cmap.set_over('#660000') # everything above range of colormap
fig = plt.figure(figsize=(15.,10.)) #create figure & size
m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=0,urcrnrlon=360.,lon_0=180.,resolution='c') #create basemap & specify data area & res
m.drawcoastlines(linewidth=1)
m.drawcountries(linewidth=1)
m.drawparallels(np.arange(-90,90,30.),linewidth=0.3)
m.drawmeridians(np.arange(-180.,180.,90.),linewidth=0.3)
meshlon,meshlat = np.meshgrid(lon,lat) #meshgrid turns lats & lons into 2D arrays
x,y = m(meshlon,meshlat) #assign 2D arrays to new variables
trend = m.pcolormesh(x,y,lintrends_mean,cmap=plt.get_cmap('jet'),norm=norm) #plot the data & specify colormap & color range
cbar=m.colorbar(trend,size="3%", label='Linear Trend (mm/day/decade)',ticks=bounds,extend="max")
cbar.set_ticklabels(bounds)
plt.title('Linear Trends of PR (CanESM2 1979-2014)',fontsize=16)
plt.xlabel('Longitude',fontsize=10)
plt.ylabel('Latitude',fontsize=10)
plt.show()
いくつかのバリアントがあります:
pcolormesh
には特別な網かけを使用してください。imshow
を使用します。scipy.interpolate
でデータを補間し、pcolormesh
でプロットします。例を見てください:
import matplotlib.pylab as plt
import numpy as np
from scipy.interpolate import interp2d
data = np.random.random((30,30))
X = np.arange(0, 30, 1)
Y = np.arange(0, 30, 1)
X, Y = np.meshgrid(X, Y)
# colormesh original
plt.subplot(3, 2, 1)
plt.pcolormesh(X, Y, data, cmap='RdBu')
# pcolormesh with special shading
plt.subplot(3, 2, 2)
plt.pcolormesh(X, Y, data, cmap='RdBu',shading='gouraud')
# imshow bilinear interp.
plt.subplot(3, 2, 3)
plt.imshow(data, cmap='RdBu', interpolation = 'bilinear')
# imshow bicubic interp.
plt.subplot(3, 2, 4)
plt.imshow(data, cmap='RdBu', interpolation = 'bicubic')
# scipy interp. cubic
f = interp2d(X, Y, data, kind='cubic')
xnew = np.arange(0, 30, .1)
ynew = np.arange(0, 30, .1)
data1 = f(xnew,ynew)
Xn, Yn = np.meshgrid(xnew, ynew)
plt.subplot(3, 2, 5)
plt.pcolormesh(Xn, Yn, data1, cmap='RdBu')
plt.show()