Создание графика с несколькими (наборы из нескольких наборов из нескольких) наборов данных по оси X - PullRequest
3 голосов
/ 07 августа 2009

Я ищу способ создания графика с несколькими наборами данных по оси X, каждый из которых разделен на множество множеств по нескольким наборам. Я в основном хочу взять этот график и разместить рядом с ним похожие графики. Я пытаюсь построить график зависимости продолжительности (ось Y) одних и тех же заданий (0-3) с разными конфигурациями (0-1) на нескольких серверах (каждая группа с одинаковыми 8 заданиями). Надеемся, что следующая диаграмма проиллюстрирует то, что я пытаюсь выполнить (меньшие группировки разделены трубками, большие группировки - двойными трубами):

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

Возможно ли это с помощью модуля Perl GD :: Graph или модуля Python matplotlib? Я не могу найти примеры или документацию по этому вопросу ни для одного.

Ответы [ 3 ]

6 голосов
/ 07 августа 2009

Вот код Python, который будет производить то, что вы ищете. (В примере используются 3 конфигурации, а не 2, чтобы убедиться, что код был достаточно общим.)

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

Этот код, вероятно, довольно прозрачен. Нечетное выражение (iconfig+2.)/(nconfigs+1) означает только затемнение цветов для различных конфигураций, но оставляя их достаточно яркими, чтобы цвета можно было различить.

Вывод выглядит так:

alt text

0 голосов
/ 25 января 2011

MathGL может сделать это легко и имеет интерфейс Python. См. this для примеров.

0 голосов
/ 07 августа 2009

Недавно я увидел график, который, я думаю, делает то, что вы хотите, используя protovis

У меня нет опыта работы с программой, но график был поучителен, и я думаю, что вы бы хотели, чтобы вы хотели.

...