"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > عند التخطيط باستخدام Matplotlib، لماذا يعاني الأداء وما الذي يمكن فعله؟

عند التخطيط باستخدام Matplotlib، لماذا يعاني الأداء وما الذي يمكن فعله؟

تم النشر بتاريخ 2024-11-06
تصفح:673

When Plotting with Matplotlib, Why Does Performance Suffer and What Can Be Done?

اعتبارات الأداء لتخطيط Matplotlib

أثناء تقييم مكتبات التخطيط المختلفة لـ Python، قد تواجه مشكلات في الأداء عند استخدام Matplotlib. تستكشف هذه المقالة سبب بطء تخطيط Matplotlib وتوفر حلولًا لتحسين سرعته.

أسباب البطء

ينبع أداء Matplotlib البطيء في المقام الأول من عاملين:

  • عمليات إعادة الرسم المتكررة: في كل مرة يتم استدعاءFig.canvas.draw()، فإنه يقوم بتحديث الشكل بالكامل، بما في ذلك عناصر مثل حدود المحاور وتسميات التجزئة. هذه العملية مكثفة حسابيًا.
  • العديد من المخططات الفرعية: المخططات التي تحتوي على مخططات فرعية متعددة تتميز بالعديد من علامات التجزئة يمكن أن تبطئ العرض بشكل كبير.

تحسين الأداء

لتعزيز الأداء، ضع في اعتبارك الاستراتيجيات التالية:

1. استخدم Blitting:

يتضمن Blitting فقط تحديث جزء معين من اللوحة القماشية بدلاً من إعادة رسم الشكل بأكمله. وهذا يقلل بشكل كبير من الحمل الحسابي. يوفر Matplotlib أساليب التقسيم الخاصة بالواجهة الخلفية والتي تختلف اعتمادًا على إطار عمل واجهة المستخدم الرسومية المستخدم.

2. تقييد إعادة الرسم:

استخدم خيار الرسوم المتحركة = True عند التخطيط. بالاشتراك مع وحدة الرسوم المتحركة Matplotlib، تسمح هذه التقنية بتحديث كائنات محددة دون التسبب في إعادة رسم اللوحة القماشية بالكامل.

3. تخصيص الحبكات الفرعية:

قلل عدد الحبكات الفرعية وتسميات التجزئة. قم بإزالة العناصر غير الضرورية لتقليل وقت العرض.

4. تعزيز كفاءة الكود:

قم بإعادة بناء الكود الخاص بك لتحسين هيكله وتقليل عدد العمليات التي يتم إجراؤها. استخدم العمليات الموجهة حيثما أمكن ذلك.

مثال:

إليك نسخة محسنة من الكود المقدم في السؤال، باستخدام النسخ مع Copy_from_bbox وrestore_region:

import matplotlib.pyplot as plt
import numpy as np
import time

x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)

fig, axes = plt.subplots(nrows=6)
fig.show()  # Draw the canvas initially

styles = ['r-', 'g-', 'y-', 'm-', 'k-', 'p-']
lines = [ax.plot(x, y, style)[0] for ax, style in zip(axes, styles)]

# Store background images of the axes
backgrounds = [fig.canvas.copy_from_bbox(ax.bbox) for ax in axes]

tstart = time.time()               
for i in range(1, 200):
    for j, line in enumerate(lines, start=1):
        # Restore the background
        fig.canvas.restore_region(backgrounds[j-1])
        
        # Update the data
        line.set_ydata(sin(j*x i/10.0))  

        # Draw the artist and blit
        ax.draw_artist(line)
        fig.canvas.blit(ax.bbox)

print('FPS:', 200/(time.time()-tstart))

المكتبات البديلة

إذا ظل أداء Matplotlib غير مرضٍ، ففكر في مكتبات التخطيط البديلة مثل مثل

بوكيه، مؤامرة، أو الطير. تعطي هذه المكتبات الأولوية للتفاعل في الوقت الفعلي وتحسين الأداء.

بيان الافراج أعيد طبع هذه المقالة على: 1729341981 في حالة وجود أي مخالفة، يرجى التواصل مع [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3