matplotlib.pyplot จะไม่ลืมพล็อตก่อนหน้า - ฉันจะล้าง / รีเฟรชได้อย่างไร


89

คุณmatplotlib.pyplotจะ "ลืม" แผนการก่อนหน้านี้ได้อย่างไร

ฉันกำลังพยายามวางแผนหลายครั้งโดยใช้ไฟล์ matplotlib.pyplot

รหัสมีลักษณะดังนี้:

def plottest():
    import numpy as np
    import matplotlib.pyplot as plt


    a=np.random.rand(10,)
    b=np.random.rand(10,)
    c=np.random.rand(10,)


    plt.plot(a,label='a')
    plt.plot(b,label='b')
    plt.plot(c,label='c')
    plt.legend(loc='upper left')
    plt.ylabel('mag')
    plt.xlabel('element)')
    plt.show()

    e=np.random.rand(10,)
    f=np.random.rand(10,)
    g=np.random.rand(10,)


    plt.plot(e,label='e')
    plt.plot(f,label='f')
    plt.plot(g,label='g')
    plt.legend(loc='upper left')
    plt.ylabel('mag')
    plt.xlabel('element)')
    plt.show()

น่าเสียดายที่ฉันได้รับพล็อตเดิม ๆ ต่อไป (อันที่จริงแล้วมาจากโค้ดอื่น ๆ ที่ฉันรันและทำเสร็จเมื่อไม่นานมานี้) ไม่ว่าฉันจะทำอะไรก็ตาม

รหัสที่คล้ายกันใช้งานได้สำหรับฉันก่อนหน้านี้

ฉันได้ดูคำถามเหล่านี้แล้ว:

"ทำความสะอาดกระดานชนวน" อย่างไร?

Matplotlib pyplot show () ไม่ทำงานเมื่อปิดแล้ว

(python) matplotlib pyplot show () .. บล็อคหรือเปล่า?

และพยายามใช้plt.show(), plt.clf()และplt.closeจะไม่มีประโยชน์

ความคิดใด ๆ ?

คำตอบ:


114

ฉันอยากจะใช้plt.clf()ทุกครั้งplt.show()เพื่อล้างตัวเลขปัจจุบันแทนที่จะปิดและเปิดใหม่รักษาขนาดหน้าต่างและให้ประสิทธิภาพที่ดีขึ้นและการใช้หน่วยความจำที่ดีขึ้นมาก

ในทำนองเดียวกันคุณสามารถทำplt.cla() เพียงแค่ล้างปัจจุบันแกน

หากต้องการล้างแกนเฉพาะซึ่งมีประโยชน์เมื่อคุณมีหลายแกนในรูปเดียวคุณสามารถทำได้ตัวอย่างเช่น

fig, axes = plt.subplots(nrows=2, ncols=2)

axes[0, 1].clear()

48

ฉันค้นพบว่าพฤติกรรมนี้จะเกิดขึ้นหลังจากเรียกใช้สคริปต์เฉพาะซึ่งคล้ายกับในคำถามเท่านั้น ฉันไม่รู้ว่าทำไมมันถึงเกิดขึ้น

มันใช้งานได้ (รีเฟรชกราฟ) ถ้าฉันใส่

plt.clf()
plt.cla()
plt.close()

ทุกครั้ง plt.show()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.