matplotlib: Achsenwerte ändern (Basis 10)

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
Chiffre
User
Beiträge: 4
Registriert: Mittwoch 10. Oktober 2012, 09:15

Hallo,
ich habe folgendes Problem mit matplotlib. Meine Achsen hab ich zuvor logarithmisch berechnet. Jetzt würde ich gerne dass die Werte als 10^value angezeigt werden. Die entscheidende Stelle:

Code: Alles auswählen

axes.imshow(cm, extent=(-1., 1., minval, maxval),
                aspect="auto")
    axes.yaxis.tick_right()
    for ticklabel in axes.get_yticklabels():
        ticklabel.set_color("white")
        ticklabel.set_size(fontsize)
    axes.yaxis.set_label_position("right")
    axes.yaxis.set_label_text(label, color = "white",
                              size = fontsize+2)
    print dir(axes.yaxis)
    axes.xaxis.set_ticks(())
Also dass aus der Beschriftung 15 beispielsweise 10^15 wird. Ich hoffe ihr könnt mir helfen.

Gruß
Drache
User
Beiträge: 51
Registriert: Montag 29. November 2010, 21:51
Wohnort: Berlin
Kontaktdaten:

Chiffre hat geschrieben:

Code: Alles auswählen

    axes.xaxis.set_ticks(())
Ist bei mir schon länger her, das ich das gemacht habe.
Deswegen bin ich mir nicht ganz sicher und hab es auch nicht getestet.
Versuch mal bitte das hier:

Code: Alles auswählen

axes.xaxis.set_ticks(('10^5','10^4','10^3))
Muss natürlich genauso len sein wie deine Liste...
Gruss
Drache
Chiffre
User
Beiträge: 4
Registriert: Mittwoch 10. Oktober 2012, 09:15

Danke für die schnelle Antwort, aber ich würde es gerne automatisieren, sprich das Script wird mit mehreren Daten ablaufen. Ich hab' jetzt schon in Erfahrung bringen können dass das imshow nicht aus dem Stegreif unterstützt, wäre aber fuer weitere Anregungen sehr dankbar!
Drache
User
Beiträge: 51
Registriert: Montag 29. November 2010, 21:51
Wohnort: Berlin
Kontaktdaten:

mir fällt es jetzt schwer mich in deinen code reinzudenken,
Ich tipp jetzt mal ein bisschen Code hier rein. Musst du natürlich entprechend bei dir umsetzten

Code: Alles auswählen

lneues_label=[]
    for row in lwert_deiner_liste:
        lneues_label.append("10^"+str(row)))
...
...
axes.xaxis.set_ticks(lneues_label)
#sollte das nicht funktionieren dann:
axes.xaxis.set_ticks(lwert_deiner_liste,lneues_label)
Sollte es nicht klappen, musst du mal ein minimal Beispiel
mit funktionierenden Code posten.
Wie gesagt ist bei mir ein bisschen her, das ich das gemacht habe.
War aber bestechend simpel, wenn man es weis wie es geht(wie immer).

Edit:
l sollte nicht benutzt werden als Anfang des Variablennamen oder liste wegen der Verwechslungsgefahr zur 1 oder großem i
Chiffre
User
Beiträge: 4
Registriert: Mittwoch 10. Oktober 2012, 09:15

Ich danke dir vielmals fuer deine Hilfe, aber nachdem ich mich durch unzaehliche Frageseiten und Dokumentationen durchgelesen habe, fand ich den Befehl der das Problem ziemlich gut angeht. Ich hoffe das erspart einen Suchenden meine zerrende Suche.

Code: Alles auswählen

from matplotlib.ticker import FormatStrFormatter

Code: Alles auswählen

if use_log:
     axes.yaxis.set_major_formatter(FormatStrFormatter(r'$10^{%d}$'))
else:
     axes.yaxis.set_major_formatter(FormatStrFormatter(r'$%d$'))
Drache
User
Beiträge: 51
Registriert: Montag 29. November 2010, 21:51
Wohnort: Berlin
Kontaktdaten:

Danke fürs teilen, sieht noch besser und simpler aus.
Antworten