Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Mengemas kini Plot Matplotlib dengan Cekap dalam Aplikasi Tkinter Selepas Menukar Skala Masa?

Bagaimanakah Saya Boleh Mengemas kini Plot Matplotlib dengan Cekap dalam Aplikasi Tkinter Selepas Menukar Skala Masa?

Mary-Kate Olsen
Lepaskan: 2024-12-09 07:10:08
asal
196 orang telah melayarinya

How Can I Efficiently Update Matplotlib Plots in a Tkinter Application After Changing the Time Scale?

Mengemas kini Plot dalam Matplotlib untuk Tkinter

Anda telah menghadapi kesukaran untuk mengemas kini plot dalam Matplotlib dalam aplikasi Tkinter. Anda membenarkan pengguna melaraskan unit skala masa, yang memerlukan pengiraan semula dan mengemas kini plot tanpa membuat plot baharu.

Pendekatan 1: Membersihkan dan Meplot Semula

Secara mudah kaedahnya ialah mengosongkan plot sedia ada dengan memanggil graph1.clear() dan graph2.clear(), kemudian replot data. Walaupun ia lebih mudah, ia juga lebih perlahan.

Pendekatan 2: Mengemas kini Data Plot

Pendekatan alternatif, yang jauh lebih pantas, melibatkan pengemaskinian data objek plot sedia ada. Ini memerlukan sedikit pelarasan kod anda:

def plots():
    global vlgaBuffSorted
    cntr()

    result = collections.defaultdict(list)
    for d in vlgaBuffSorted:
        result[d['event']].append(d)

    result_list = result.values()

    f = Figure()
    graph1 = f.add_subplot(211)
    graph2 = f.add_subplot(212, sharex=graph1)

    # Create plot objects
    vds_line, = graph1.plot([], [], 'bo', label='a')
    vgs_line, = graph1.plot([], [], 'rp', label='b')
    isub_line, = graph2.plot([], [], 'b-', label='c')

    for item in result_list:
        # Update plot data
        vds_line.set_data([], [])
        vgs_line.set_data([], [])
        isub_line.set_data([], [])

        tL = []
        vgsL = []
        vdsL = []
        isubL = []
        for dict in item:
            tL.append(dict['time'])
            vgsL.append(dict['vgs'])
            vdsL.append(dict['vds'])
            isubL.append(dict['isub'])

        # Update plot data
        vds_line.set_data(tL, vdsL)
        vgs_line.set_data(tL, vgsL)
        isub_line.set_data(tL, isubL)

    # Draw the plot
    f.canvas.draw()
    f.canvas.flush_events()
Salin selepas log masuk

Dalam pendekatan ini, anda mencipta objek plot (cth., vds_line), kemudian mengemas kini datanya dengan setiap lelaran. Kaedah draw() dan flush_events() digunakan untuk memaparkan plot yang dikemas kini pada tetingkap Tkinter.

Dengan memilih pendekatan yang sesuai, anda boleh mengemas kini plot dalam Matplotlib dengan berkesan dalam aplikasi Tkinter anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengemas kini Plot Matplotlib dengan Cekap dalam Aplikasi Tkinter Selepas Menukar Skala Masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan