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')
vietnastee
sumber

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)
ecatmur.dll
sumber
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)
silviomoreto.dll
sumber
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.

Remi Cuingnet
sumber
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!

Skywalker 326
sumber