tutorial - matplotlib شرح




متى تستخدم cla() ، clf() أو close() لإزالة قطعة أرض في matplotlib؟ (2)

كلهم يفعلون أشياء مختلفة ، حيث أن matplotlib يستخدم ترتيبًا هرميًا حيث تحتوي نافذة الشكل على رقم قد يتكون من العديد من المحاور. بالإضافة إلى ذلك ، هناك وظائف من واجهة pyplot وهناك طرق على فئة Figure . سأناقش كلتا الحالتين أدناه.

واجهة pyplot

pyplot عبارة عن وحدة تجمع اثنين من الوظائف التي تسمح باستخدام matplotlib بطريقة وظيفية. أفترض هنا أنه تم import matplotlib.pyplot as plt . في هذه الحالة ، هناك ثلاثة أوامر مختلفة تقوم بإزالة الأشياء:

plt.cla() محورًا ، أي المحور النشط حاليًا في الشكل الحالي. يترك الفؤوس الأخرى دون تغيير.

plt.clf() الشكل الحالي بأكمله plt.clf() ، لكنه يترك النافذة مفتوحة ، بحيث يمكن إعادة استخدامها لمؤامرات أخرى.

يغلق plt.close() نافذة ، والتي ستكون النافذة الحالية ، إذا لم يتم تحديدها بخلاف ذلك.

الوظائف التي تناسبك تعتمد بالتالي على حالة الاستخدام.

وعلاوة على ذلك ، تسمح وظيفة close() لأحد بتحديد أي نافذة يجب إغلاقها. يمكن أن تكون الوسيطة عبارة عن رقم أو اسم تم إعطاؤه إلى نافذة عندما تم إنشاؤه باستخدام figure(number_or_name) أو يمكن أن يكون شكل fig تم الحصول عليه ، أي باستخدام fig = figure() . إذا لم يتم إعطاء أي وسيطة close() ، سيتم إغلاق الإطار النشط حاليًا. علاوة على ذلك ، هناك صيغة close('all') ، والتي تغلق كل الأرقام.

طرق لفئة الشكل

بالإضافة إلى ذلك ، توفر فئة Figure أساليب لمسح الأرقام. سأفترض في fig التالي أن fig هو مثال Figure :

fig.clf() مسح الرقم بالكامل . هذه plt.clf() تعادل plt.clf() فقط إذا كان fig الحالي هو الشكل.

fig.clear() مرادف لـ fig.clf()

لاحظ أنه حتى del fig لن يغلق نافذة الشكل المرتبط. بقدر ما أعرف الطريقة الوحيدة لإغلاق إطار الشكل يستخدم plt.close(fig) كما هو موضح أعلاه.

يوفر Matplotlib هناك وظائف:

cla()   # Clear axis
clf()   # Clear figure
close() # Close a figure window

لا تقدم الوثائق الكثير من الأفكار حول الفرق بين هذه الوظائف. متى يجب علي استخدام كل وظيفة وماذا تفعل بالضبط؟


هناك فقط تحذير اكتشفته اليوم. إذا كان لديك دالة تقوم باستدعاء مؤامرة في الكثير من الأحيان ، فأنت تستخدم بشكل أفضل plt.close(fig) بدلاً من fig.clf() بطريقة أو بأخرى لا تتراكم في الذاكرة. باختصار ، إذا كانت الذاكرة هي موضع الاهتمام ، استخدم plt.close (التين) (على الرغم من أنه يبدو أن هناك طرقًا أفضل ، انتقل إلى نهاية هذا التعليق للارتباطات ذات الصلة).

لذلك سينتج البرنامج النصي التالي قائمة فارغة:

for i in range(5):
    fig = plot_figure()
    plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())

في حين أن هذا واحد سوف تنتج قائمة مع خمسة أرقام على ذلك.

for i in range(5):
    fig = plot_figure()
    fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())

من الوثائق المذكورة أعلاه ليس واضحا لي ما هو الفرق بين إغلاق الشكل وإغلاق النافذة. ربما هذا سوف يوضح.

إذا كنت ترغب في تجربة برنامج نصي كامل لديك:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = np.sin(x)

for i in range(5):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y)
    plt.close(fig)

print(plt.get_fignums())

for i in range(5):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y)
    fig.clf()

print(plt.get_fignums())

إذا كانت الذاكرة مصدر قلق نشره أحد الأشخاص بالفعل في العمل في SO ، فراجع: أنشئ رقمًا مرجعًا محسوبًا





matplotlib