2016-11-23 5 views
2

당신이 기본 맵을 만들 때 일반적으로, 당신이 축 인스턴스에 할당 할 수 있습니다,가 , 30 subplots, 같은 것을 할 필요가는</p> <pre><code>fig = plt.figure() ax = fig.add_subplot() m = Basemap(..., ax=ax) </code></pre> <p>지금은 가능한지도를 다시 그릴없이 많은 줄거리에 기본 맵을 그리는 예를 들어 여러 번

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

하나의 인스턴스를 만드는 경우 모든지도에서 동일한 데이터를 갖게됩니다. – furas

+0

흠, 그건 내가 원하는 것이 아닙니다. 지도는 동일하지만 데이터가 달라집니다. 다시 그리는 대신베이스 맵을 복제 할 수 있습니까? – Peter9192

+0

나를 위해 모든 기본 맵은 자체적으로 다시 그려야합니다. 비트 맵을 만든 다음 다시 그리기 대신 비트 맵을 사용할 수 있다고 생각하지 않습니다. – furas

답변

0

이론적으로 Basemap에 플롯하면 모든 객체를 삭제 (또는 보이지 않게 설정)하고 다시 사용할 수 있습니다. 내가 한 번 genMap를 호출하고 내 그리기 기능에 인수로 자사의 결과를 사용하는 주에서

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

:

... 
bMap = generateMap() 
lon,lat = bMap(lon,lat) 
t = threading.Thread(target=plot(cur_hour, leg, OUTDIR, bMap, lon, lat)) 
t.start() 
... 
t.join() 
... 
지도를 생성하기 위해, 다른 하나는 데이터를 플롯 -

그러나 나는 두 가지 기능을 이용한했다

이 코드는 매우 빠르게 작동하지만 Basemap 클래스를 과소 평가하여 놓친 것 같습니다.

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 객체 인스턴스를 어떻게 든 다시 설정할 필요가있을 수 있습니다.