2014-03-25 56 views
3

我正在創建一個顯示世界地圖的數字(它在這裏是無關緊要的)。現在我想使用平移/縮放按鈕或縮放到矩形按鈕來放大它,然後在完成放大後將圖保存到圖片文件中。問題在於軸註釋(和lng/lat線)在圖片中是「硬嵌入的」,這使得它們在放大時會消失。保存Axis註釋時交互放大matplotlib底圖圖?

有人知道如何獲得適合縮放的軸註釋嗎?

這裏是一個最小的工作示例(沒有任何資料):

import matplotlib as mpl 
import matplotlib.pyplot as plt 

from mpl_toolkits.basemap import Basemap 
import numpy as np 

fig = plt.figure(1, figsize=(12, 7)) 
m = Basemap(projection='merc',llcrnrlat=-80,urcrnrlat=80,\ 
      llcrnrlon=-180,urcrnrlon=180,resolution='l') #,lat_ts=20 
m.drawcoastlines(); m.fillcontinents(); m.drawcountries() 
# draw parallels and meridians. 
m.drawparallels(np.arange(-90.,91.,30.),labels=[True, False, False, False], color='White') 
m.drawmeridians(np.arange(-180.,181.,60.), labels=[False, False, False, True], color='White') 
plt.show() 

回答

2

萬一有人曾經絆倒我的問題,這裏是我想出了一個相當快的變通。 :-)

我想要的應用是放大,然後保存圖。現在我不這樣做交互,但通過在代碼中輸入「縮放的邊界框」並動態創建具有以下功能的lng/lat-ticks(需要預先輸入import numpy as np):

def calculateBasemapTicks(minMaxList, nrOfParalles = 3, nrOfMeridians = 3): 
    """ 
    Attempts to calculate meaningful ranges for .basemap.drawparallels 
    and .drawmeridians. Enter a <minMaxList> in the form 
    [lng_min, lng_max, lat_min, lat_max]. 
    Note that you might get rather ugly floats. I suggest using formatting 
    as in ".drawparallels(..., fmt='%.4f')" or similar. 
    """ 

    pAdjust = (minMaxList[3]-minMaxList[2])*0.1 
    mAdjust = (minMaxList[1]-minMaxList[0])*0.1 
    parallels = np.linspace(minMaxList[2]+pAdjust,minMaxList[3]-pAdjust, 
          nrOfParalles) 
    meridians = np.linspace(minMaxList[0]+mAdjust,minMaxList[1]-mAdjust, 
          nrOfMeridians) 
    return parallels, meridians