通常,在创建底图时,可以将其指定给轴实例,例如
fig = plt.figure()
ax = fig.add_subplot()
m = Basemap(..., ax=ax)
现在,如果我想制作30个子图,我需要做类似
的事情fig, axes = plt.subplots(6,5)
for ax in axes:
m = Basemap(..., ax=ax)
# plot some other things
但重绘底图需要很长时间。我想知道是否可以创建一次底图实例,然后将其分配给我的所有轴。类似的东西:
m0 = Basemap(...) # without ax = ax
for ax in axes:
m = add_basemap(ax,m0)
# plot some other things
这可能吗?
作为替代方案,我考虑过用所有底图创建一次图形然后进行酸洗,但子图的数量并不总是相同。
答案 0 :(得分:0)
如果您在理论上绘制Public Function createInput() As String()
Dim int = myControls.Length
Dim count As Integer = 0
Dim str(int) As String
For i = 1 To int - 1 Step 2
str(count) = myControls(i).Text
count += 1
Next
Return str
End Function
,您可以删除(或设置不可见)所有对象并重复使用地图。
然而,我做了两个功能 - 一个用于生成地图,另一个用于绘制数据:
Basemap
在main中,我调用def genMap():
bMap = Basemap(llcrnrlat=5, urcrnrlat=50, llcrnrlon=10, urcrnrlon=210, \
rsphere=(6378137.00,6356752.3142),resolution='i',projection='lcc',lat_1=30.,lat_2=60.,lat_0=48.,lon_0=135.)
return bMap
def plot(cur_hour, leg, outdir, bMap, lon, lat):
fig = plt.figure(figsize=(17, 17), dpi=70, facecolor='w', edgecolor='k')
bMap.drawcountries(linewidth=1.5, color='purple')
bMap.fillcontinents(color='#FFFCC4', zorder = 0)
bMap.drawcoastlines(linewidth=0.75)
bMap.drawparallels(np.arange(-90., 120., 10.), labels=[1,0,0,0], color="k", fontsize=LEGEND_SIZE, linewidth=1, labelstyle='+/-')
bMap.drawmeridians(np.arange(0., 420., 10.), labels=[0,0,0,1], color="k", fontsize=LEGEND_SIZE, linewidth=1, labelstyle='+/-')
CF2 = plt.contourf(lon[::2,::2], lat[::2,::2], fl[::2,::2])
一次,并将其结果用作绘制函数的参数:
genMap
此代码的工作速度非常快,但我可能会错过Basemap类的低估。
答案 1 :(得分:0)
实际上可以这样做:
fig, axes = plt.subplots(6,5)
flat_axes = axes.reshape(-1)
m = Basemap(...) # without ax = ax
for ax in flat_axes:
m.ax = ax
# plot some other things
注意,需要展平轴网格以使迭代变得容易。在"绘制其他一些东西后,可能还需要以某种方式重置Basemap对象实例。这里。