0

我正在从 MySQL 数据库中读取此类数据:

('c9', 2862, datetime.datetime(2016, 4, 30, 22, 34, 38))
('f2', 2862, datetime.datetime(2016, 4, 30, 22, 35, 38))
('f3', 2864, datetime.datetime(2016, 4, 30, 22, 36, 38))
('f4', 2863, datetime.datetime(2016, 4, 30, 22, 37, 38))
('c9', 2880, datetime.datetime(2016, 4, 30, 22, 38, 38))
('f2', 2862, datetime.datetime(2016, 4, 30, 22, 39, 38)) 
# and so on! 

我想使用该库pygal制作一个图表,将第 1 列(c9、f2、f3 ...)中的所有节点组合在一个图中,每个节点都有其各自的时间。所以我尝试了以下方法:

time = []
y_c9 = []
y_f3 = []
y_f2 = []
for row in data:
   time.append(row[2])
   if row[0] == 'c9':
       y_c9.append(row[1])
   if row[0] == 'f2':
       y_f2.append(row[1])
   if row[0] == 'f3':
       y_f3.append(row[1])
   # and the same for the rest
   graph.x_labels = time
   graph.add('c9', y_c9)
   graph.add('f2', y_f2)
   graph.add('f3', y_f3

但是,这并没有削减它,因为我会得到 c9、f2、f3 的短线,而时间(x 轴)将具有更长的值(y_c9、y_f2、y_f3 的长度是 < 时间长度)我尝试了其他几种 if 语句组合,但效果不佳。

我应该怎么做才能生成正确的图表?

4

1 回答 1

1

您需要使用XY 图表,或者更具体地说,pygal.DateTimeLine图表类型。这样,所有值都将根据相同的时间尺度绘制,并且线条将是连续的。

像这样:

graph.x_labels = [item[2] for item in data]
graph.add('c9',[(item[2],item[0] if item[1]=='c9' else 0) for item in data])
graph.add('c9',[(item[2],item[0] if item[1]=='f3' else 0) for item in data])
graph.add('c9',[(item[2],item[0] if item[1]=='f2' else 0) for item in data])
于 2016-04-30T21:23:55.750 回答