matplotlib ottiene i valori ylim


115

Sto usando matplotlibper tracciare dati (usando plote errorbarfunzioni) da Python. Devo tracciare una serie di grafici totalmente separati e indipendenti, quindi regolare i loro ylimvalori in modo che possano essere facilmente confrontati visivamente.

Come posso recuperare i ylimvalori da ogni grafico, in modo da poter prendere il minimo e il massimo dei valori ylim inferiore e superiore, rispettivamente, e regolare i grafici in modo che possano essere confrontati visivamente?

Naturalmente, potrei semplicemente analizzare i dati e trovare i miei ylimvalori personalizzati ... ma mi piacerebbe utilizzarlo matplotlibper me. Qualche suggerimento su come farlo facilmente (ed efficacemente)?

Ecco la mia funzione Python che traccia usando 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)

Risposte:


159

Basta usare axes.get_ylim(), è molto simile a set_ylim. Dai documenti :

get_ylim ()

Ottieni l'intervallo dell'asse y [inferiore, superiore]


2
c'è un modo per ottenere il limite dell'area del grafico, piuttosto che il limite dell'asse? Il rettangolo di delimitazione nero è leggermente oltre questi valori.
Peter Ehrlich

@PeterEhrlich Questi sono solo i margini.
ilija139

12
Trovo plt.gca().get_ylim()utile - non c'è bisogno di una definizione aggiuntiva degli assi.
Matthias Arras

In alternativa, preferisco utilizzare fig, ax = plt.subplots()e quindi indirizzare tutte le mie funzioni attraverso figoax
BallpointBen

34
 ymin, ymax = axes.get_ylim()

Se utilizzi pltdirettamente l' API, puoi evitare del tutto le chiamate agli assi:

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)

10

Sfruttando le buone risposte sopra e assumendo che stavi usando solo plt come in

import matplotlib.pyplot as plt

quindi puoi ottenere tutti e quattro i limiti della trama usando plt.axis()come nell'esempio seguente.

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()

Il codice precedente dovrebbe produrre il seguente grafico di output. inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.