matplotlib mendapatkan nilai ylim

115

Saya menggunakan matplotlibuntuk memplot data (menggunakan plotdan errorbarfungsi) dari Python. Saya harus memplot satu set plot yang benar-benar terpisah dan independen, dan kemudian menyesuaikan ylimnilainya sehingga dapat dengan mudah dibandingkan secara visual.

Bagaimana saya dapat mengambil ylimnilai dari setiap plot, sehingga saya dapat mengambil nilai minimum dan maksimum dari nilai ylim bawah dan atas, dan menyesuaikan plot sehingga dapat dibandingkan secara visual?

Tentu saja, saya hanya dapat menganalisis data dan menghasilkan ylimnilai khusus saya sendiri ... tetapi saya ingin menggunakannya matplotlibuntuk saya. Adakah saran tentang cara melakukan ini dengan mudah (dan efisien)?

Inilah fungsi Python saya yang menggunakan plot 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
sumber

Jawaban:

159

Cukup gunakan axes.get_ylim(), ini sangat mirip dengan set_ylim. Dari dokumen :

get_ylim ()

Dapatkan rentang sumbu y [bawah, atas]

elyase
sumber
2
adakah cara untuk mendapatkan batas area grafik, daripada batas sumbu? Persegi panjang pembatas hitam sedikit di luar nilai ini.
Peter Ehrlich
@PeterEhrlich Itu hanya marginnya.
ilija139
12
Saya merasa plt.gca().get_ylim()berguna - tidak perlu definisi sumbu tambahan.
Matthias Arras
Atau, saya lebih suka menggunakan fig, ax = plt.subplots()dan kemudian mengarahkan semua fungsi saya melalui salah satu figatauax
BallpointBen
34
 ymin, ymax = axes.get_ylim()

Jika Anda menggunakan pltapi secara langsung, Anda dapat menghindari panggilan ke sumbu sama sekali:

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
sumber
10

Memanfaatkan jawaban bagus di atas dan dengan asumsi Anda hanya menggunakan plt seperti pada

import matplotlib.pyplot as plt

maka Anda bisa mendapatkan keempat batas plot menggunakan plt.axis()seperti pada contoh berikut.

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

Kode di atas harus menghasilkan plot keluaran berikut. masukkan deskripsi gambar di sini

Thom Ives
sumber