Gerando um gráfico com múltiplos (conjuntos de vários conjuntos de conjuntos de dados de vários conjuntos de vários)

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

Pergunta

Estou procurando uma maneira de gerar um gráfico com vários conjuntos de dados no eixo x, cada um dos quais é dividido em vários conjuntos de vários conjuntos. Eu basicamente quero levar este gráfico e coloque gráficos semelhantes lado a lado com ele. Estou tentando representar graficamente o gráfico de um gráfico da duração (eixo y) dos mesmos trabalhos (0-3) com diferentes configurações (0-1) em vários servidores (cada grupo com os mesmos 8 trabalhos). Espero que o diagrama a seguir ilustre o que estou tentando realizar (agrupamentos menores são separados por tubos, agrupamentos maiores por tubos duplos):

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

Isso é possível com o módulo GD :: Graph Perl ou o módulo Matplotlib Python? Não consigo encontrar exemplos ou documentação sobre esse assunto.

Foi útil?

Solução

Aqui está algum código Python que produzirá o que você está procurando. (O exemplo usa 3 configurações em vez de 2 para garantir que o código fosse bastante geral.)

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 é provavelmente bastante transparente. O termo ímpar (iconfig+2.)/(nconfigs+1) é apenas para diminuir as cores para as diferentes configurações, mas mantenha -as brilhantes o suficiente para que as cores possam ser distinguidas.

A saída se parece:

alt text

Outras dicas

Recentemente, vi um gráfico que acho que faz o que você quer usarProtovis

Não tenho experiência com o programa, mas o gráfico foi esclarecedor e acho que você quer que você queira.

Mathgl Pode fazê -lo facilmente e ele também tem interface Python. Ver isto por exemplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top