Piechart auf Karte plotten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gilb
User
Beiträge: 4
Registriert: Mittwoch 31. März 2010, 13:12

Hallo Leute,

ich habe vor ein paar Tortendiagramme auf eine Karte zu plotten um Anteile in verschiedenen Regionen anzuzeigen.

Karten kann ich ja mit basemap plotten und Tortendiagramme erstelle ich mit pyplot.pie - jetzt muss ich also nur noch die beiden Sachen zusammenbringen und genau da liegt mein Problem: Ich finde keinen Weg, die Position so einer Torte auf der Karte festzulegen oder ihre Größe anzupassen.

Hat jemand von euch eine Idee?

Danke schonmal!
gilb
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

schau dir mal das Beispiel an: http://scipy.org/Cookbook/Matplotlib/Maps

Dort werden zwar Städtenamen auf den Globus geplottet, aber was du letztendlich drauf plottest ist ja egal.

Plan B: Beides als .png mit transparentem Hintergrund speichern und dann mit PIL übereinander legen. Ist aber wahrscheinlich recht fummelig...

Gruß, noisefloor
gilb
User
Beiträge: 4
Registriert: Mittwoch 31. März 2010, 13:12

Das habe ich mir schon angeschaut. Bei Text und Punkten kann man ja auch Größe und Koordinaten problemlos ändern - und genau das kriege ich ja mit den pie charts nicht hin.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@gilb: Code?
gilb
User
Beiträge: 4
Registriert: Mittwoch 31. März 2010, 13:12

Also so sieht im Wesentlichen das Beispiel hinter dem Link aus.

Code: Alles auswählen

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

map = Basemap(projection='ortho',lat_0=50,lon_0=-100,resolution='l',area_thresh=1000.)

map.drawcoastlines()
map.drawcountries()
map.drawmapboundary()

lats=[40.02,32.73]
lons=[-105.16,-117.16]
cities=['Boulder, CO','San Diego']

x,y = map(lons,lats)

map.plot(x,y,'bo')

for name,xpt,ypt in zip(cities,x,y):
    plt.text(xpt+50000,ypt+50000,name)
plt.show()
Und ich würde gern in den letzten Zeilen etwas derartiges machen:

Code: Alles auswählen

proportions=[[0.3,0.2,0.5],[0.6,0.1,0.3]]

for prop,xpt,ypt in zip(proportions,x,y):
    plt.pie(prop) #hier würde ich gern Position(xpt,ypt) auf der Karte und Größe bestimmen
plt.show()
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ohne es getestet zu haben (habe die Module alle nicht installiert...) würde ich sagen:

Kann so nicht funktioniert. Also rein vom Prinziop nicht. Die kriegst die Position so nicht unter.

Anstatt mit der for-Schleife zu iterieren würde ich zum Testen es erstmal händisch machen: Also jede Tortengrafik generieren und dann auf Welkarte plotte.

Gruß, noisefloor
gilb
User
Beiträge: 4
Registriert: Mittwoch 31. März 2010, 13:12

Sorry, vielleicht stehe ich gerade auf dem Schlauch, aber wie soll ich denn die Torten auf die Karte plotten, ohne ihnen eine Positions zu geben?
Antworten