Cara menyetel 'otomatis' untuk batas atas, tetapi tetap mempertahankan batas bawah dengan matplotlib.pyplot


112

Saya ingin menyetel batas atas sumbu y menjadi 'auto', tetapi saya ingin agar batas bawah sumbu y selalu nol. Saya mencoba 'auto' dan 'autorange', tapi sepertinya tidak berhasil. Terima kasih sebelumnya.

Ini kode saya:

import matplotlib.pyplot as plt

def plot(results_plt,title,filename):

    ############################
    # Plot results

    # mirror result table such that each parameter forms an own data array
    plt.cla()
    #print results_plt
    XY_results = []

    XY_results = zip( *results_plt)

    plt.plot(XY_results[0], XY_results[2], marker = ".")

    plt.title('%s' % (title) )
    plt.xlabel('Input Voltage [V]')
    plt.ylabel('Input Current [mA]')

    plt.grid(True)
    plt.xlim(3.0, 4.2)  #***I want to keep these values fixed"
    plt.ylim([0, 80]) #****CHANGE**** I want to change '80' to auto, but still keep 0 as the lower limit 
    plt.savefig(path+filename+'.png')

Jawaban:


104

Anda dapat lulus hanya leftatau rightke set_xlim:

plt.gca().set_xlim(left=0)

Untuk sumbu y, gunakan bottomatau top:

plt.gca().set_ylim(bottom=0)

1
Saya mendapat kesalahan saat melewati kiri untuk set_ylim. Saya menggunakan ini sebagai gantinya: plt.gca (). Set_ylim (ymin = 0) Terima kasih atas bantuan Anda.
vietnastee

Anda juga dapat menggunakan plt.xlimatau plt.ylimuntuk mengatur batas sumbu saat ini.
Chris

26
Ketika saya melakukan ini, batas atas menempel pada nilai apa pun yang dipakai jendela. Ini tidak tetap penskalaan otomatis.
Elliot

8
Masalah yang sama dengan @Elliot di sini. Dapat diperbaiki dengan mengatur (satu sisi) ylim / xlim setelah memplot nilainya.
fabianfuchs

5
Pastikan untuk mengatur batas setelah memplot data, atau batas atas akan default ke 1.
Banana

37

Cukup tetapkan xlimsalah satu batasannya:

plt.xlim(xmin=0)

5
xmindan xmaxtidak lagi digunakan untuk mendukung leftdan rightdi Matplotlib 3.0.
onewhaleid

12

Seperti yang disebutkan di atas dan menurut dokumentasi matplotlib, batas-x dari sumbu yang diberikan axdapat disetel menggunakan set_xlimmetode matplotlib.axes.Axeskelas.

Misalnya,

>>> ax.set_xlim(left_limit, right_limit)
>>> ax.set_xlim((left_limit, right_limit))
>>> ax.set_xlim(left=left_limit, right=right_limit)

Satu batas dapat dibiarkan tidak berubah (misalnya batas kiri):

>>> ax.set_xlim((None, right_limit))
>>> ax.set_xlim(None, right_limit)
>>> ax.set_xlim(left=None, right=right_limit)
>>> ax.set_xlim(right=right_limit)

Untuk mengatur batas x sumbu saat ini, matplotlib.pyplotmodul berisi xlimfungsi yang hanya membungkus matplotlib.pyplot.gcadan matplotlib.axes.Axes.set_xlim.

def xlim(*args, **kwargs):
    ax = gca()
    if not args and not kwargs:
        return ax.get_xlim()
    ret = ax.set_xlim(*args, **kwargs)
    return ret

Demikian pula, untuk batas y, gunakan matplotlib.axes.Axes.set_ylimatau matplotlib.pyplot.ylim. Argumen kata kunci adalah topdan bottom.


3

Cukup tambahkan satu titik pada @silvio's: jika Anda menggunakan sumbu untuk membuat plot suka figure, ax1 = plt.subplots(1,2,1). Kemudian ax1.set_xlim(xmin = 0)juga berhasil!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.