إنشاء رسم بياني مع مجموعات بيانات متعددة (مجموعات متعددة من مجموعات متعددة) XIS
-
12-09-2019 - |
سؤال
أنا أبحث عن وسيلة لتوليد رسم بياني مع مجموعات متعددة من البيانات على المحور X، كل منها مقسمة إلى مجموعات متعددة من مجموعات متعددة. أنا أساسا أريد أن تأخذ هذا الرسم البياني ووضع الرسوم البيانية المماثلة جنبا إلى جنب معها. أحاول رسم بياني إنشاء رسم بياني للمدة (محور ص) من نفس الوظائف (0-3) مع تكوينات مختلفة (0-1) على خوادم متعددة (كل مجموعة مع نفس الوظائف 8). نأمل أن يوضح المخطط التالي ما أحاول إنجازه (يتم فصل المجموعات الأصغر بالأنابيب، مجموعات أكبر بواسطة أنابيب مزدوجة):
|| 0 1 | 0 1 | 0 1 | 0 1 ||. 0 1 | 0 1 | 0 1 | 0 1 ||. 0 1 | 0 1 | 0 1 | 0 1 ||. || 0 | 1 | 2 | 3 ||. 0 | 1 | 2 | 3 ||. 0 | 1 | 2 | 3 ||. || الخادم 1 ||. خادم 2 ||. الخادم 3 ||.
هل هذا ممكن مع وحدة Perl GD :: Graph أو وحدة Python Matplotlib؟ لا يمكنني العثور على أمثلة أو وثائق حول هذا الموضوع أيضا.
المحلول
إليك بعض رمز بيثون الذي سينتج ما تبحث عنه. (يستخدم المثال 3 تكوينات بدلا من 2 للتأكد من أن الكود كان عاما إلى حد ما.)
import matplotlib.pyplot as plt
import random
nconfigs, njobs, nservers = 3, 4, 4
width = .9/(nconfigs*njobs)
job_colors = [(0,0,1), (0,1,0), (1,0,0), (1,0,1)]
def dim(color, fraction=.5):
return tuple([fraction*channel for channel in color])
plt.figure()
x = 0
for iserver in range(nservers):
for ijob in range(njobs):
for iconfig in range(nconfigs):
color = dim(job_colors[ijob], (iconfig+2.)/(nconfigs+1))
plt.bar(x, 1.+random.random(), width, color=color)
x += width
x += .1
plt.show()
هذا الرمز هو ربما شفافة إلى حد ما. المصطلح الغريب (iconfig+2.)/(nconfigs+1)
هو مجرد خافت الألوان لتكوينات مختلفة، ولكن احتفظ بها مشرقة بما يكفي حتى يمكن تمييز الألوان.
يبدو الإخراج: