it-swarm.com.de

matplotlib liefert ylim-Werte

Ich verwende matplotlib, um Daten (unter Verwendung der Funktionen plot und errorbar) aus Python zu zeichnen. Ich muss eine Reihe völlig separater und unabhängiger Diagramme zeichnen und dann die ylim -Werte anpassen, damit sie leicht visuell verglichen werden können.

Wie kann ich die ylim -Werte aus jedem Diagramm abrufen, damit ich die minimalen und maximalen Werte des unteren bzw. oberen Grenzwerts ermitteln und die Diagramme anpassen kann, damit sie visuell verglichen werden können?

Natürlich könnte ich einfach die Daten analysieren und meine eigenen benutzerdefinierten ylim Werte ausarbeiten ... aber ich würde gerne matplotlib verwenden, um das für mich zu tun. Irgendwelche Vorschläge, wie dies einfach (und effizient) durchgeführt werden kann?

Hier ist meine Python Funktion, die mit matplotlib plottet:

import matplotlib.pyplot as plt

def myplotfunction(title, values, errors, plot_file_name):

    # plot errorbars
    indices = range(0, len(values))
    fig = plt.figure()
    plt.errorbar(Tuple(indices), Tuple(values), Tuple(errors), marker='.')

    # axes
    axes = plt.gca()
    axes.set_xlim([-0.5, len(values) - 0.5])
    axes.set_xlabel('My x-axis title')
    axes.set_ylabel('My y-axis title')

    # title
    plt.title(title)

    # save as file
    plt.savefig(plot_file_name)

    # close figure
    plt.close(fig)
90
synaptik

Benutze einfach axes.get_ylim(), es ist sehr ähnlich zu set_ylim. Aus dem docs :

get_ylim ()

Ermitteln des Bereichs der y-Achse [unten, oben]

116
elyase
 ymin, ymax = axes.get_ylim()

Wenn Sie die plt -Struktur verwenden, warum kümmern Sie sich dann überhaupt um die Achsen? Das sollte funktionieren:

def myplotfunction(title, values, errors, plot_file_name):

    # plot errorbars
    indices = range(0, len(values))
    fig = plt.figure()
    plt.errorbar(Tuple(indices), Tuple(values), Tuple(errors), marker='.')

    plt.xlim([-0.5, len(values) - 0.5])
    plt.xlabel('My x-axis title')
    plt.ylabel('My y-axis title')

    # title
    plt.title(title)

    # save as file
    plt.savefig(plot_file_name)

   # close figure
    plt.close(fig)

Oder ist das nicht der Fall?

29
Adam Hughes

Nutzen Sie die guten Antworten oben und nehmen Sie an, dass Sie nur plt wie in verwenden

import matplotlib.pyplot as plt

dann können Sie alle vier Plotgrenzen mit plt.axis() abrufen, wie im folgenden Beispiel gezeigt.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8]  # fake data
y = [1, 2, 3, 4, 3, 2, 5, 6]

plt.plot(x, y, 'k')

xmin, xmax, ymin, ymax = plt.axis()

s = 'xmin = ' + str(round(xmin, 2)) + ', ' + \
    'xmax = ' + str(xmax) + '\n' + \
    'ymin = ' + str(ymin) + ', ' + \
    'ymax = ' + str(ymax) + ' '

plt.annotate(s, (1, 5))

plt.show()

Der obige Code sollte das folgende Ausgabe-Diagramm erzeugen. enter image description here

1
Thom Ives