在DateTimeLine中使用pygal Value配置

时间:2019-06-04 12:47:19

标签: python pygal

我正在绘制一些CPU时间统计信息,并希望能够注释某些值。我想为此使用pygal's value configuration,但这似乎无法与我使用的DateTimeLine图表结合使用。

def generate_cpu_time_plot(csv_file_path, output_file):
    user = []
    system = []
    with open(csv_file_path, encoding="utf-8") as csv_file:
        reader = csv.DictReader(csv_file)
        for row in reader:
            time = datetime.fromtimestamp(int(row['time_millis']) / 1000)
            user.append((time, {
                'value': float(row['cpu_time_user'])
            }))
            system.append((time, {
                'value': float(row['cpu_time_system'])
            }))

    chart = pygal.DateTimeLine(x_label_rotation=35,
                               x_value_formatter=lambda dt: dt.strftime(
                                   '%d/%m/%Y %H:%M'), x_title='Time',
                               y_title='CPU time',
                               title=os.path.basename(csv_file_path))
    chart.add("User", user)
    chart.add("System", system)
    chart.render_to_file(output_file)

这给了我一个TypeError:TypeError: '<' not supported between instances of 'dict' and 'dict'

有没有办法使这种组合有效?如果我直接使用浮点数而不使用dict,则效果很好。

1 个答案:

答案 0 :(得分:0)

您提供给XY图表的x和y值的元组为 值。当您使用dict格式提供值时,需要将value属性设置为该元组。

目前,您的代码尝试在元组中为y值放置dict。将值附加到usersystem列表的行更改为以下内容应该可以解决此问题:

user.append({'value': (time, float(row['cpu_time_user']))})
system.append({'value': (time, float(row['cpu_time_system']))})