Сгенерирование графа с несколькими (наборами нескольких наборов нескольких) наборов данных о оси x

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

Вопрос

Я ищу способ сгенерировать график с несколькими наборами данных на оси 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              ||

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

Это было полезно?

Решение

Вот какой -то код 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

Другие советы

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

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

Матль может сделать это легко, и у него тоже есть интерфейс Python. Видеть это Например.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top