2012-10-26 126 views
2

這是我在Stack Overflow上的第一個問題,所以如果我忽略了任何東西,我很抱歉。我正在繪製巡航位置圖,並且我正在60度北面發生雙平行線,其中一條是直線(在立體投影上)。Matplotlib底圖在立體投影上繪製兩個平行線

有沒有人知道我在做什麼造成這種情況?

我的繪圖腳本(引用外部數據):

from mpl_toolkits.basemap import Basemap 
import numpy as np 
import matplotlib.pyplot as plt 
import sys 
import csv 

dataFile = sys.argv[1] 
dataStream = open(dataFile, 'rb') 
dataReader = csv.reader(dataStream, delimiter=',') 
numRows = sys.argv[2] 

dataLat = [] 
dataLon = [] 

dataReader.next() 
for row in dataReader: 
    dataLon.append(float(row[5])) 
    dataLat.append(float(row[6])) 

m = Basemap(width=450000,height=150000, 
     resolution='f',projection='stere',\ 
     lat_ts=65.4,lat_0=60.4,lon_0=1.91) 

m.drawcoastlines(linewidth=0.2) 
m.fillcontinents(color='white', lake_color='aqua') 

x, y = m(dataLat,dataLon) 
m.scatter(x,y,.5,marker='.',color='k') 

m.drawparallels(np.arange(0.,81,1.), labels=[1,0,0,0], fontsize=10) 
m.drawmeridians(np.arange(-180.,181.,5.), labels=[0,0,0,1], fontsize=10) 
m.drawmapboundary(fill_color='aqua') 

plt.title("Cruise Track") 
plt.show() 

例子: Example plot

另外一個小問題:什麼是情節的寬度/高度的單位?它似乎沒有在文檔中,我找不到它在任何教程中提及等。

+0

'm'的定義似乎缺失。如果你只調用'm.drawparallels(...',然後是'plt.show()'),你會得到雙重平行嗎? – jorgeca

+0

剛剛添加了定義;看起來我做了一個可憐的複製粘貼作業。 'm.drawparallels'最少需要兩個參數 – ryanjdillon

+0

另外,感謝Squido先生給我的問題添加了數字! – ryanjdillon

回答

2

似乎是因爲試圖修復另一個錯誤。

我不使用底圖,但第一步嘗試解決的問題是儘可能多減少他們儘可能:

from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 

scale = 1 
m = Basemap(width=450000*scale,height=150000, 
     resolution='i',projection='stere', 
     lat_ts=65.4,lat_0=60.4,lon_0=1.91) 

parallels = [60] 
ret = m.drawparallels(parallels) 
plt.show() 

您可以在docsdrawparallels返回一個字典看,我們可以恢復實際的Line2D(平行)和它的數據點:

l = ret[60][0][0] 
x, y = l.get_data() 

如果我們看一下點,它看起來並不壞,除非我們將它們鏈接,然後我們可以看到惱人的雙平行!

plt.plot(x, y, '+') 
plt.show() 

+ points

plt.plot(x, y) 
plt.show() 

Linked points

現在,讓我們嘗試通過調試器(python -m pdb small_example.py)運行的小例子。

如果您在調用drawparallels的步驟中很快就會到達this code。它看起來不太好,所以讓我們跳過突出顯示的行(使用jump,如果您從未使用Python調試器,您應該閱讀一下它)。

,瞧,這就是結果:

Solved issue

考慮到哪裏出了問題,很容易猜測,改變地圖的寬度或高度(以米爲單位,順便說一句)可以擺脫這個問題。確實,設置scale>=1.0485的作品。寬度和高度的其他組合似乎也很好。

+0

工作得很好!將我的繪圖寬度乘以1.0485後,再也沒有雙重平行了。 python調試器。謝謝! – ryanjdillon

相關問題