البرمجة

تحليل بيانات Excel باستخدام Python و Matplotlib

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

لتحقيق هذا في رمزك، يمكنك استخدام دالة set_text() لتحديث نص معين داخل الرسم البياني بدلاً من استخدام ax.text() التي تقوم بإنشاء نص جديد في كل مرة. هناك أيضًا بعض التغييرات الأخرى التي يمكن أن تساعد في تحسين أداء الرسم البياني.

فيما يلي التغييرات التي يجب إجراؤها على رمزك:

  1. احذف دالة y_text() بالكامل، لأنها لم تعد ضرورية.
  2. استبدل استخدام ax.text() في دالة update() بدلاً من ذلك استخدم text.set_text() حيث text هو النص الذي تريد تحديثه.
  3. قم بإنشاء متغير text لكلمة النص الثابتة التي تريد عرضها، وذلك بعد إنشاء الرسم البياني.

اليك كود معدل بناءً على التغييرات المذكورة:

python
import numpy as np from openpyxl import load_workbook as ld import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt from matplotlib.widgets import Slider wb = ld(filename='example.xlsx') data = wb['data'] time = wb['time'] row = data.max_row column = data.max_column x = np.ones((row, column)) y = np.ones((row, column)) result = np.ones(row) for i in range(0, row): for j in range(0, column): x[i][j] = time.cell(row=i+1, column=j+1).value y[i][j] = data.cell(row=i+1, column=j+1).value fig, ax = plt.subplots() plt.subplots_adjust(left=0.25, bottom=0.25) plt.plot(x[0], y[0], label='line1') plt.plot(x[1], y[1], label='line2') plt.plot(x[2], y[2], label='line3') line, = plt.plot((np.amin(x), np.amin(x)), (np.amin(y), np.amax(y))) plt.legend() plt.grid(True) # إنشاء نص ثابت لعرض قيمة y text = ax.text(10, 8, "", style='italic') axtime = plt.axes([0.25, 0.1, 0.65, 0.03]) stime = Slider(axtime, 'time', np.amin(x), np.amax(x), valinit=np.amin(x)) def find(t): global x, y, result for i in range(0, row): for j in range(0, column): if x[i][j] == t or (t < x[i][j] and j == 0) or (t > x[i][j] and j == column): result[i] = y[i][j] elif x[i][j] < t < x[i][j+1]: result[i] = ((t-x[i][j])/(x[i][j+1]-x[i][j]))*(y[i][j+1]-y[i][j])+y[i][j] return result def update(val): line.set_xdata(stime.val) y_val = find(stime.val) text.set_text(str(y_val)) # تحديث قيمة النص fig.canvas.draw() stime.on_changed(update) plt.show()

باستخدام هذا التعديل، سترى أن النص لا يتم كتابته من جديد بل يتم تحديثه مباشرة داخل الرسم البياني بدون أي تلاشي أو تداخل.

المزيد من المعلومات

بالطبع، هنا بعض المعلومات الإضافية التي قد تكون مفيدة لك:

  1. استخدام Openpyxl: في الرمز الذي قدمته، استخدمت مكتبة Openpyxl لقراءة البيانات من ملف Excel. هذه المكتبة توفر واجهة برمجة التطبيقات (API) للتعامل مع ملفات Excel بتنسيق .xlsx.

  2. Matplotlib: هي مكتبة Python شهيرة وقوية تستخدم لإنشاء الرسوم البيانية والمخططات بطريقة بسيطة وفعالة. يتم استخدامها هنا لرسم البيانات الناتجة من ملف Excel باستخدام دوال مثل plt.plot() و plt.subplots().

  3. الانتراكتيفية في الرسوم البيانية باستخدام Slider: يتم استخدام المكتبة Matplotlib.widgets لإنشاء عنصر التحكم Slider الذي يتيح للمستخدم تحديد قيمة محددة من متغير معين، في هذه الحالة الزمن (time)، وتحديث الرسم البياني بناءً على القيمة المحددة.

  4. تحسين الأداء والتنظيم في الرسم البياني: قمت بتحسين الرمز لجعله أكثر تنظيماً وكفاءة، مثل استخدام متغيرات عالمية لتقليل الاستدعاءات المتكررة لنفس القيم وتجنب إعادة إنشاء النص بشكل متكرر في الرسم البياني.

  5. إنشاء نص ثابت في الرسم البياني: تم إضافة نص ثابت في الرسم البياني باستخدام ax.text() لعرض قيمة y المحددة بواسطة Slider.

هذه المعلومات إضافية يمكن أن تساعد في فهم كيفية استخدام المكتبات المختلفة وتحسين الأداء وإضافة العناصر التفاعلية إلى الرسوم البيانية.

شاهد أيضاً
إغلاق
زر الذهاب إلى الأعلى