Generazione di un grafico con più set di dati dell'asse X più set (set di più set di più) set di dati
-
12-09-2019 - |
Domanda
Sto cercando un modo per generare un grafico con più set di dati sull'asse X, ognuno dei quali è diviso in più set di più set. Fondamentalmente voglio prendere questo grafico e posizionare grafici simili fianco a fianco. Sto cercando di grafici a gravare un grafico della durata (asse y) degli stessi lavori (0-3) con configurazioni diverse (0-1) su più server (ciascun gruppo con gli stessi 8 lavori). Spero che il seguente diagramma illustrerà ciò che sto cercando di realizzare (i raggruppamenti più piccoli sono separati da tubi, raggruppamenti più grandi da doppi tubi):
|| 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 || || Server 1 || Server 2 || Server 3 ||
È possibile con il modulo GD :: Graph Perl o il modulo Python Matplotlib? Non riesco a trovare esempi o documentazione su questo argomento.
Soluzione
Ecco un codice Python che produrrà quello che stai cercando. (L'esempio utilizza 3 configurazioni anziché 2 per assicurarsi che il codice fosse abbastanza generale.)
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()
Questo codice è probabilmente abbastanza trasparente. Il termine dispari (iconfig+2.)/(nconfigs+1)
è solo per ridurre i colori per le diverse configurazioni, ma mantenerli abbastanza luminosi in modo che i colori possano essere distinti.
L'output sembra: