2017-08-09 77 views
1

我想用绘制的地图上的CSV文件行和标记绘图matplotlib.线/曲目不能与Matplotlib

数据:

AL99,2017080912,SHIP,0,17.1,-55.6,25,0 
AL99,2017080912,SHIP,12,18.1,-57.6,27,0 
AL99,2017080912,SHIP,24,19.0,-59.2,29,0 
AL99,2017080912,SHIP,36,20.1,-60.2,34,0 
AL99,2017080912,SHIP,48,21.5,-61.6,39,0 
AL99,2017080912,SHIP,60,23.3,-63.0,47,0 
AL99,2017080912,SHIP,72,25.4,-65.2,54,0 
AL99,2017080912,SHIP,84,27.9,-68.1,61,0 
AL99,2017080912,TABD,0,17.1,-55.7,0,0 
AL99,2017080912,TABD,6,17.5,-56.7,0,0 
AL99,2017080912,TABD,12,17.8,-57.3,0,0 
AL99,2017080912,TABD,18,18.1,-57.9,0,0 
AL99,2017080912,TABD,24,18.5,-58.3,0,0 
AL99,2017080912,TABD,30,19.0,-58.6,0,0 
AL99,2017080912,TABD,36,19.6,-58.8,0,0 

Python代码:

tc = np.recfromcsv(csv_file, unpack=True, names=['stormid', 'initdate', 'mems', 'times', 'tclat', 'tclon', 'tcwind', 'tcpres'], dtype=None) 
for j in range(len(tc.times)): 
lon, lat = tc.tclon[j], tc.tclat[j] 
xpt, ypt = m(lon, lat) 
lonpt, latpt = m(xpt, ypt, inverse=True) 

if tc.mems[j] == 'TABD': 
    tccolor = '--bo' 
elif tc.mems[j] == 'AEMN': 
    tccolor = '-ro' 
else: 
    tccolor = '-k' 

m.plot(xpt, ypt, tccolor) 

结果:

enter image description here

我得到的标记,以正确的颜色绘制,但该行不存在。

+2

只是一个提醒,你的代码是不完整的(什么是'M'?)和格式不正确(了'for'循环之后没有缩进)。此外,你的数据看起来不符合你的情节(例如,你的数据中的'lat'只有15到20之间;然而你的情节看起来像大西洋,纬度至少达到40)。因此,您的问题可能难以让其他人解决问题并提供帮助。 –

+0

当您不提供完整的代码时,不要期望得到答案。除非你很幸运。通常,需要回答的人会花费更多的努力。 – swatchai

回答

1

要启用线图,plot()函数必须与多点(x,y)数组一起提供,而不是像以前那样提供单个值。 下面是一个工作代码和结果输出图(根据您提供的数据)。

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

fig = plt.gcf() 
fig.set_size_inches([8,8]) 

m = Basemap(projection='cyl', \ 
     llcrnrlat= 10, urcrnrlat= 30, \ 
     llcrnrlon= -70, urcrnrlon= -50, \ 
     resolution='l') 

csv_file = "storm_data.csv" 
tc = np.recfromcsv(csv_file, unpack=True, names=['stormid', 'initdate', 'mems', 'times', 'tclat', 'tclon', 'tcwind', 'tcpres'], dtype=None) 

# for each line segment, (xs, ys) is initialized here 
# two of them are done here for demo purposes 
xs1 = [] 
ys1 = [] 
xs2 = [] 
ys2 = [] 

for j in range(len(tc.times)): 
    lon, lat = tc.tclon[j], tc.tclat[j] 
    xpt, ypt = m(lon, lat) 
    lonpt, latpt = m(xpt, ypt, inverse=True) 

    if tc.mems[j] == 'TABD': 
     xs1.append(lon) 
     ys1.append(lat) 

    elif tc.mems[j] == 'SHIP': 
     xs2.append(lon) 
     ys2.append(lat) 

    # *** elif for other line segmems *** 

    else: 
     pass 


# plot the collected line segments 
m.plot(xs1, ys1, '--bo', xs2, ys2, '--ro') 

# draw coastline 
m.drawcoastlines() 

plt.show() 

所得的情节:

enter image description here