Seite 1 von 1

2 dimensionaler Plot und Achsenskalierung

Verfasst: Mittwoch 22. November 2017, 12:00
von Simon123
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

Re: 2 dimensionaler Plot und Achsenskalierung

Verfasst: Mittwoch 22. November 2017, 13:30
von narpfel
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.

Re: 2 dimensionaler Plot und Achsenskalierung

Verfasst: Mittwoch 22. November 2017, 13:44
von Sirius3
@Simon123: plotte alles und setze die Achsengrenzen mit plt.xlim und plt.ylim.

Re: 2 dimensionaler Plot und Achsenskalierung

Verfasst: Mittwoch 22. November 2017, 14:40
von Simon123
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

Re: 2 dimensionaler Plot und Achsenskalierung

Verfasst: Mittwoch 22. November 2017, 15:32
von narpfel

Re: 2 dimensionaler Plot und Achsenskalierung

Verfasst: Freitag 24. November 2017, 11:59
von Simon123
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

Re: 2 dimensionaler Plot und Achsenskalierung

Verfasst: Freitag 24. November 2017, 12:36
von narpfel
Mit `Axes.add_patch` kann man einen `Patch` dem `Axes`-Objekt, auf das man plottet, hinzufügen.