رسم dumbbell chart من الرسومات التي تشدني كثيراً. هو باختصار dot plot مع إضافة خط بين النقاط المترابطة. لذلك سميت dumbbell لأن شكلها يشبه شكل أثقال الحديد الرياضية. هذا الخط يضيف شيء من الجمالية والوضوح للمعلومة المعروضة في الرسم.
بحثت عن طريقة رسم dumbbell chart في بايثون وما وجدتها. على الرغم من أن هناك شروحات لها في أكثر من أداة ولغة (Excel، Tableau، R). لذلك قررت رسمها بنفسي.
قبل أن نبدأ، دعونا نتخيل أن نريد رسم البيانات التالية:
سنقوم بتمثيل هذه البيانات في بايثون بهذا الشكل:
1 2 3 4 5 |
import matplotlib.pyplot as plt labels = ['A', 'B', 'C'] a_values = [5, 6, 10] b_values = [12, 10, 7] |
بعد ذلك سنصنع Figure ونضيف له Axes:
6 7 8 |
# Create the figure fig = plt.figure() ax = fig.add_subplot(111) |
الآن سنبدأ بعمل loop حتى نقوم برسم كل مجموعة (كل سطر في ملف الاكسل) على حدة. سنحتاج أن نرسم التالي بالترتيب:
- الخط بين الدائرتين.
- الدائرتين a و b.
- قيم الدالتين (5 و 12 مثلاً) فوق الدائرتين.
- ثم نكتب اسم المجموعة (A مثلاً) على اليسار.
9 10 11 12 13 14 15 16 17 18 19 |
for i in list(range(len(labels))): # Plot the line between dumbbells ax.plot([a_values[i], b_values[i]], [i, i], color='black') # Plot the dumbbells. ax.plot(a_values[i], i, color='red', marker='o', markersize=15) ax.plot(b_values[i], i, color='blue', marker='o', markersize=15) # Add data label on top of dumbbells ax.text(a_values[i], i, a_values[i], horizontalalignment='center', verticalalignment='center', color='white') ax.text(b_values[i], i, b_values[i], horizontalalignment='center', verticalalignment='center', color='white') # Add the axis label ax.text(3, i, labels[i], horizontalalignment='right', verticalalignment='center', fontsize=12) |
بقي الآن أن نعرض الرسمة:
20 21 22 23 |
# Adjust and show the plot fig.subplots_adjust(left=0.3) ax.set_axis_off() plt.show() |
هذا الكود سينتج هذه الرسمة:
بالطبع يمكن استخدام تنسيقات مكتبة matplotlib لتحسين مظهر الرسمة بشكل كبير، مثل هذا المثال:
الفرق في درجات اختبار القدرات بين البنين والبنات بحسب المنطقة.#بايثون#قياس #قدرات pic.twitter.com/ycdJdxwonV
— تركي الشمري (@iTurki) February 19, 2017
الكود المستخدم في الرسمة أعلاه متاح هنا، ويمكنك تعديله بسهولة لترسم بياناتك الخاصة. مع ملاحظة أن النص العربي تم إضافته بالفوتوشوب. البايثون متعب مع النصوص العربية 🙁