Generación de un gráfico con múltiples conjuntos (conjuntos de múltiples conjuntos de múltiples) conjuntos de datos del eje X)

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

Pregunta

Estoy buscando una manera de generar un gráfico con múltiples conjuntos de datos en el eje X, cada uno de los cuales se divide en múltiples conjuntos de múltiples conjuntos. Básicamente quiero tomar este gráfico y coloque gráficos similares al lado de él. Estoy tratando de graficar el gráfico de construir un gráfico de la duración (eje y) de los mismos trabajos (0-3) con diferentes configuraciones (0-1) en múltiples servidores (cada grupo con los mismos 8 trabajos). Esperemos que el siguiente diagrama ilustra lo que estoy tratando de lograr (las agrupaciones más pequeñas están separadas por tuberías, agrupaciones más grandes por tuberías dobles):

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

¿Es esto posible con el módulo GD :: Graph Perl o el módulo Matplotlib Python? No puedo encontrar ejemplos o documentación sobre este tema para ninguno de los dos.

¿Fue útil?

Solución

Aquí hay un código de Python que producirá lo que está buscando. (El ejemplo usa 3 configuraciones en lugar de 2 para asegurarse de que el código fuera bastante general).

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

Este código es probablemente bastante transparente. El término impar (iconfig+2.)/(nconfigs+1) es solo para atenuar los colores para las diferentes configuraciones, pero manténgalos lo suficientemente brillantes para que los colores puedan distinguirse.

La salida parece:

alt text

Otros consejos

Recientemente, vi un gráfico que creo que hace lo que quieres usarprotovis

No tengo experiencia con el programa, pero el gráfico fue esclarecedor y creo que te daría que quieres.

Mathgl Puede hacerlo fácilmente y también tiene interfaz de Python. Ver este por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top