2 dimensionaler Plot und Achsenskalierung

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
Simon123
User
Beiträge: 10
Registriert: Freitag 17. November 2017, 18:17

Hallo zusammen,

ich habe eine Funktion geschrieben die mir einen Teil einer 2 dimensionalen Karte plottet. Zum Beispiel ist die Karte 1000 mal 1000 gross, ich interessiere mich aber nur fuer den Ausschnitt von x in 800 bis 900 und y in 600 bis 700. Soweit gibt mir diese Funktion auch genau diesen Ausschnitt zurueck, allerdings sind nun die Werte der x-Achse und y-Achse von 0 bis 100 beschriftet. Wie kann ich die Achsenbeschriftung aendern, sodass die x-Achse von 800 bis 900 und die y-Achse von 600 bis 700 geht.

Code: Alles auswählen

def f_plot_map(map2d,x_center,y_center,size):
    left_x=x_center-size/2
    right_x=x_center+size/2
    left_y=y_center-size/2
    right_y=y_center+size/2
    map_to_plot=map2d[left_y:right_y,left_x:right_x]
    plt.imshow(map_to_plot, cmap="hot", clim=(0,1000.))
    plt.title('map')
    plt.xlabel('x pixels')
    plt.ylabel('y pixels')
    plt.colorbar()
    plt.show() 
Vielen Dank und viele Gruesse,
Simon
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

Moin,

du musst einen `extent` an `imshow` übergeben, sonst werden die Achsen einfach mit den Indices der Pixel beschriftet. Eventuell ist auch `pcolormesh` einen Blick wert.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Simon123: plotte alles und setze die Achsengrenzen mit plt.xlim und plt.ylim.
Simon123
User
Beiträge: 10
Registriert: Freitag 17. November 2017, 18:17

Vielen Dank fuer eure Hilfe. Ich habe mich fuer extent entschieden, da es schneller geht als alles zu plotten.

Ich moechte nun in die 2d Map einen Kreis mit einem Radius von 20 Pixeln hinzufuegen. Habt ihr einen Tipp was ich dazu am besten benutze?

Viele Gruesse
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

Simon123
User
Beiträge: 10
Registriert: Freitag 17. November 2017, 18:17

Ja das sieht mir nach dem richtigen Tool aus. Allerdings habe ich noch nicht rausgefunden, wie ich den Kreis zu meinem Plot hinzufuege. Hier mal die Funktion soweit:

Code: Alles auswählen

from matplotlib.patches import Circle


def f_plot_map(map2d,x_center,y_center,size,fig_num):
#This functions creates a plot of a 2 dimensional map, where only the map between x_center+-size and y_center+-size is plotted. fig_num is just number of figure
    left_x=x_center-size/2
    right_x=x_center+size/2
    low_y=y_center-size/2
    high_y=y_center+size/2
    map_to_plot=map2d[low_y:high_y,left_x:right_x]
    plt.figure(fig_num)
    plt.imshow(map_to_plot, cmap="hot", clim=(0,20), extent=(left_x,right_x,high_y,low_y))
    plt.title('kappa=0.6, gamma=0.6, s=0.5')
    plt.xlabel('x pixels')
    plt.ylabel('y pixels')
    plt.colorbar()
    x = x_center
    y = y_center
    r = 10
    circle = Circle((x, y), r)
Viele Gruesse
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

Mit `Axes.add_patch` kann man einen `Patch` dem `Axes`-Objekt, auf das man plottet, hinzufügen.
Antworten