2013-10-21 127 views
2

我试图在15种不同颜色的地图上绘制15种不同风暴的路径。路径的颜色应该取决于风暴的名称。例如,如果风暴的名字是AUDREY,风暴路径的颜色应该在地图上是红色的。有些人可以帮助/指向正确的方向吗?用Python中的颜色字典绘制不同颜色的线条

这里是我的代码的一部分:

import numpy as np 
from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
import csv, os, scipy 
import pandas 
from PIL import * 


data = np.loadtxt('louisianastormb.csv',dtype=np.str,delimiter=',',skiprows=1) 
'''print data''' 
fig = plt.figure(figsize=(12,12)) 

ax = fig.add_axes([0.1,0.1,0.8,0.8]) 

m = Basemap(llcrnrlon=-100.,llcrnrlat=0.,urcrnrlon=-20.,urcrnrlat=57., 
      projection='lcc',lat_1=20.,lat_2=40.,lon_0=-60., 
      resolution ='l',area_thresh=1000.) 

m.bluemarble() 
m.drawcoastlines(linewidth=0.5) 
m.drawcountries(linewidth=0.5) 
m.drawstates(linewidth=0.5) 

# Creates parallels and meridians 
m.drawparallels(np.arange(10.,35.,5.),labels=[1,0,0,1]) 
m.drawmeridians(np.arange(-120.,-80.,5.),labels=[1,0,0,1]) 
m.drawmapboundary(fill_color='aqua') 
color_dict = {'AUDREY': 'red', 'ETHEL': 'white', 'BETSY': 'yellow','CAMILLE': 'blue', 'CARMEN': 'green', 
'BABE': 'purple', 'BOB': '#ff69b4', 'FREDERIC': 'black', 'ELENA': 'cyan', 'JUAN': 'magenta', 'FLORENCE': '#faebd7', 
'ANDREW': '#2e8b57', 'GEORGES': '#eeefff', 'ISIDORE': '#da70d6', 'IVAN': '#ff7f50', 'CINDY': '#cd853f', 
'DENNIS': '#bc8f8f', 'RITA': '#5f9ea0', 'IDA': '#daa520'} 

# Opens data file witn numpy 
'''data = np.loadtxt('louisianastormb.csv',dtype=np.str,delimiter=',',skiprows=0)''' 
'''print data''' 
colnames = ['Year','Name','Type','Latitude','Longitude'] 
data = pandas.read_csv('louisianastormb.csv', names=colnames) 
names = list(data.Name) 
lat = list(data.Latitude) 
long = list(data.Longitude) 
colorName = list(data.Name) 
#print lat 
#print long 
lat.pop(0) 
long.pop(0) 
latitude= map(float, lat) 
longitude = map(float, long) 
x, y = m(latitude,longitude) 
#Plots points on map 
for colorName in color_dict.keys(): 
    plt.plot(x,y,'-',label=colorName,color=color_dict[colorName], linewidth=2) 
    lg = plt.legend() 
    lg.get_frame().set_facecolor('grey') 
plt.title('20 Hurricanes with Landfall in Louisiana') 
#plt.show() 
plt.savefig('20hurpaths1.jpg', dpi=100) 

这里的错误消息,我不断收到的是:

Traceback (most recent call last):                     
    File "/home/mikey1/lstorms.py", line 51, in <module>               
    plt.plot(x,y,'y-',color=colors[names], linewidth=2)               
    TypeError: unhashable type: 'list'                     
>>> 

回答

1

你没有正确地访问字典条目。首先你做这个names = list(data.Name)。所以名字的类型是lists。然后你打电话给这样的字典:color_dict[names]。问题不在于设置颜色,而在于如何尝试访问字典(list不是有效的键)。

改变它的东西,如:

for colourName in color_dict.keys(): 
    plt.plot(x,y,'y-',color=color_dict[colourName], linewidth=2) # You need to use different data for the data series here. 

,它会工作。

此外,您的错误消息显示为plt.plot(x,y,'y-',color=colors[names], linewidth=2),但在您的代码中有color=colors_dict[names]。你确定你发布了正确的代码吗?

+0

噢好的。对不起,我是这个新手。我只是看了一些关于python字典的例子,但它仍然令人困惑。访问字典的最佳方法是什么? – mikez1

+0

非常感谢你!对不起,代码是相同的,但我只是将其从颜色更改为color_dict,以保持一切独特。 – mikez1

+0

不用担心队友。为了将来的参考,最好是如果键是“类型”或“类型”。有一个简单的例子,如何以编程方式访问我的答案中的词典条目。它现在工作吗?如果不是用新问题更新问题,如果你接受了答案,那么确实很好。 –

相关问题