Как построить несколько графиков на одном графике с помощью pygal?

Я пытаюсь построить несколько серий с двумя измерениями (так что на самом деле это графики num_of_time_series x 2) на одном рисунке, используя pygal. Например, предположим, что данные mt:

from collections import defaultdict

measurement_1=defaultdict(None,[
  ("component1", [11.83, 11.35, 0.55]), 
  ("component2", [2.19, 2.42, 0.96]),
  ("component3", [1.98, 2.17, 0.17])])

measurement_2=defaultdict(None,[
  ("component1", [34940.57, 35260.41, 370.45]),
  ("component2", [1360.67, 1369.58, 2.69]),
  ("component3", [13355.60, 14790.81, 55.63])])

x_labels=['2016-12-01', '2016-12-02', '2016-12-03']

и код рендеринга графа таков:

from pygal import graph
import pygal
def draw(measurement_1, measurement_2 ,x_labels):
  graph = pygal.Line()
  graph.x_labels = x_labels

  for key, value in measurement_1.iteritems():
      graph.add(key, value)
  for key, value in measurement_2.iteritems():
      graph.add(key, value, secondary=True)

  return graph.render_data_uri()

Текущий результат: это.

Проблема в приведенном выше коде заключается в том, что неясно, какой график представляет измерение 1, а какой представляет измерение 2. Во-вторых, я хотел бы видеть каждый компонент в другом цвете (или форме).

Этот график призван сравнить один компонент с двумя другими и увидеть корреляцию между измерениями 1 и 2.

Спасибо за помощь, ребята!


person Idan azuri    schedule 25.12.2016    source источник
comment
Если вы нашли ответ на вопрос, поместите его в раздел «Ответы» ниже, а не в сам пункт вопроса.   -  person Muhammad Nizami    schedule 18.12.2017


Ответы (1)


Я разобрался, как выделить сравниваемый компонент пунктирной линией. Код должен выглядеть так:

from pygal import graph
import pygal

def draw(measurement_1, measurement_2 ,x_labels):
  graph = pygal.Line()
  graph.x_labels = x_labels

  for key, value in measurement_1.iteritems():
     ##
     if "component1":
        graph.add(key, value, stroke_style={'width': 5, 'dasharray': '3, 6', 'linecap': 'round', 'linejoin': 'round'})
     else:
     ##
        graph.add(key, value)
  for key, value in measurement_2.iteritems():
      graph.add(key, value, secondary=True)

  return graph.render_data_uri()
person Idan azuri    schedule 18.12.2017