Plot-Linien in verschiedenen Farben von color dictionary in Python
Ich versuche, die Handlung der Weg von 15 verschiedenen Stürme auf einer Karte in 15 verschiedenen Farben. Die Farbe des Pfades abhängen soll der name des Sturms. Zum Beispiel, wenn der Sturm name ist AUDREY, die Farbe der storm-Weg sollte rot auf der Karte. Könnten einige bitte helfen/zeigen Sie mich in die richtige Richtung?
Hier ist der Teil von meinem code:
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)
Hier ist die Fehlermeldung, die ich erhalte ist:
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'
>>>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Greifen Sie auf die Wörterbuch-Einträge falsch. First off Sie dies tun
names = list(data.Name)
. Also Namen ist der Typlists
. Dann rufen Sie Wörterbuch wie dieses:color_dict[names]
. Das problem ist nicht die Einstellung der Farbe, sondern wie Sie versuchen, Zugriff auf das Wörterbuch (list
ist nicht mit einem gültigen key).Ändern Sie ihn auf etwas wie:
Und es wird funktionieren.
Auch deine Fehlermeldung liest
plt.plot(x,y,'y-',color=colors[names], linewidth=2 )
aber in deinem code hast ducolor=colors_dict[names]
. Sind Sie sicher, dass Sie den richtigen code gepostet?type <int>
odertype <str>
. Und es gibt ein einfaches Beispiel, wie Sie programmgesteuert Zugriff auf Wörterbücher Einträge in meiner Antwort. Funktioniert es jetzt? Wenn nicht, aktualisieren Sie die Frage mit " neues problem, wenn es funktioniert wäre gut, wenn Sie akzeptiert die Antwort.Basemap
. Nicht einmal, dass es existierte, aber es ' a ziemlich cool und relevant für das, was ich mache, so vielen Dank für dieses posting hier 😉 Zwei Dinge, die würde ich untersuchen: 1) entfernen Sie die Kommentarzeichenplt.show()
und aktualisieren Sie die Abbildung (z.B. maximieren, ist es auf dem Bildschirm). 2) Sind Sie sicher, dass diesex, y = m(latitude,longitude)
macht was Ihr wollt es zurückgeben? (hier kommt meine mangelnde Vertrautheit mitBasemap
...)