2014-09-30 3 views
50

Sto usando matplotlib per tracciare i dati (usando le funzioni plot e errorbar) da Python. Devo tracciare un insieme di trame totalmente separate e indipendenti, e poi aggiustarle sono valori ylim in modo che possano essere facilmente confrontati visivamente.matplotlib get ylim values ​​

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

Ovviamente, ho potuto semplicemente analizzare i dati e ottenere i miei valori personalizzati ylim ... ma mi piacerebbe usare matplotlib per farlo per me. Qualche suggerimento su come fare facilmente (ed efficientemente) questo?

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

risposta

64

Basta usare axes.get_ylim(), è molto simile a set_ylim. Dal docs:

get_ylim()

ottenere la gamma asse y [bottom, top]

+0

esiste un modo per ottenere il limite dell'area del grafico anziché il limite dell'asse? Il rettangolo di delimitazione del nero è leggermente oltre questi valori. –

18
ymin, ymax = axes.get_ylim() 

Se si utilizza la struttura plt, perché nemmeno la briga con il assi? Questo dovrebbe funzionare:

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) 

Oppure non è questo il caso?

+0

La semplificazione suggerita potrebbe essere utile. Tuttavia, potrei desiderare di usare gli assi da soli. Non so davvero, ad essere onesti. – synaptik

+1

Ya, devo ammettere che in ogni programma matplotlib, vado avanti e indietro ripetutamente! –