2009-08-07 7 views
3

Je cherche un moyen de générer un graphique avec plusieurs jeux de données sur l'axe X, chacun étant divisé en plusieurs jeux de plusieurs ensembles. Je veux fondamentalement prendre this graph et placer des graphiques similaires côte à côte avec lui. J'essaie de représenter graphiquement la construction d'un graphique de la durée (axe Y) des mêmes jobs (0-3) avec différentes configurations (0-1) sur plusieurs serveurs (chaque groupe ayant les mêmes 8 jobs). Espérons que le schéma ci-dessous illustre ce que je suis en train d'accomplir (petits groupes sont séparés par des tuyaux, des groupes plus grands par des doubles tuyaux):Génération d'un graphique avec plusieurs jeux de données d'ensembles d'axes X (jeux de plusieurs jeux multiples)

|| 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    ||

Est-ce possible avec soit le GD :: Graph module Perl ou Python le matplotlib module? Je ne trouve pas d'exemples ou de documentation sur ce sujet pour l'un ou l'autre.

Répondre

6

Voici un code Python qui va produire ce que vous cherchez. (L'exemple utilise 3 configurations plutôt que 2 pour s'assurer que le code était assez général.)

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() 

Ce code est probablement assez transparent. Le terme impair (iconfig+2.)/(nconfigs+1) est juste pour assombrir les couleurs pour les différentes configurations, mais gardez-les assez brillantes pour que les couleurs puissent être distinguées.

La sortie ressemble à:

alt text http://i28.tinypic.com/dgrnzk.png

+0

Merci. Maintenant, comment puis-je générer _X groupes de_ Y groupes de barres? – titaniumdecoy

+0

J'ai édité ma réponse (à la fois le code et les mots ci-dessous) pour adresser les groupes X des barres Y, ou est-ce que je ne comprends pas ce que vous voulez dire par "X groupes de barres Y"? La figure montre "5 groupes de 7 bars", non? – tom10

+1

Vous avez raison, peut-être que j'ai mal formulé mon problème. Ce que je cherche vraiment, c'est une façon de faire un graphique de X groupes de Y groupes de Z groupes de barres. Je vais modifier ma question en conséquence. – titaniumdecoy

0

Récemment, j'ai vu un graphique que je pense ne ce que vous voulez à l'aide protovis

Je n'ai aucune expérience avec le programme, mais le graphique était éclairant et je pense que cela vous donnerait envie que vous voulez.

0

MathGL peut le faire facilement et il a aussi une interface Python. Voir this pour des exemples.

Questions connexes