Generazione di un grafico con più set di dati dell'asse X più set (set di più set di più) set di dati

StackOverflow https://stackoverflow.com/questions/1242270

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.

È stato utile?

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:

alt text

Altri suggerimenti

Di recente ho visto un grafico che penso faccia quello che vuoi usareprotovis

Non ho esperienza con il programma, ma il grafico è stato illuminante e penso che ti darebbe voglia.

Mathgl Può farlo facilmente e ha anche l'interfaccia Python. Vedere questo per esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top