Вот код Python, который будет производить то, что вы ищете. (В примере используются 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)
означает только затемнение цветов для различных конфигураций, но оставляя их достаточно яркими, чтобы цвета можно было различить.
Вывод выглядит так: