matplotlib erhält ylim-Werte

114

Ich verwende matplotlib, um Daten (mit plotund errorbarFunktionen) aus Python zu zeichnen . Ich muss eine Reihe von völlig getrennten und unabhängigen Plots zeichnen und dann ihre ylimWerte anpassen , damit sie leicht visuell verglichen werden können.

Wie kann ich die ylimWerte aus jedem Diagramm abrufen , sodass ich die Min- und Max-Werte der unteren und oberen Ylim-Werte verwenden und die Diagramme so anpassen kann, dass sie visuell verglichen werden können?

Natürlich könnte ich einfach die Daten analysieren und meine eigenen benutzerdefinierten ylimWerte erstellen ... aber ich würde das gerne matplotlibfür mich tun. Irgendwelche Vorschläge, wie dies einfach (und effizient) gemacht werden kann?

Hier ist meine Python-Funktion, die mit folgenden Plots erstellt matplotlib:

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)
synaptik
quelle

Antworten:

158

Verwenden axes.get_ylim()Sie einfach , es ist sehr ähnlich zu set_ylim. Aus den Dokumenten :

get_ylim ()

Holen Sie sich den Bereich der y-Achse [unten, oben]

Elyase
quelle
2
Gibt es eine Möglichkeit, die Grafikflächengrenze anstelle der Achsengrenze zu ermitteln? Das schwarze Begrenzungsrechteck liegt geringfügig über diesen Werten.
Peter Ehrlich
@PeterEhrlich Das sind nur die Ränder.
ilija139
11
Ich finde plt.gca().get_ylim()es praktisch - es ist keine zusätzliche Achsendefinition erforderlich.
Matthias Arras
Alternativ ziehe ich es zu benutzen fig, ax = plt.subplots()und dann Route alle meine Funktionen entweder über figoderax
BallpointBen
34
 ymin, ymax = axes.get_ylim()

Wenn Sie die pltAPI direkt verwenden, können Sie Aufrufe der Achsen insgesamt vermeiden:

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)
Adam Hughes
quelle
10

Nutzen Sie die guten Antworten oben und gehen Sie davon aus, dass Sie nur plt wie in verwenden

import matplotlib.pyplot as plt

Dann können Sie alle vier Plotlimits plt.axis()wie im folgenden Beispiel abrufen.

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 Ausgabediagramm erzeugen. Geben Sie hier die Bildbeschreibung ein

Thom Ives
quelle