首页 文章

使用Python,如何以编程方式更新Pygal图表的数据?

提问于
浏览
0

使用Python,如何以编程方式更新Pygal图表的数据?

下面的代码可以很好地用作静态Stacked-Bar图表,但我无法弄清楚如何适应不断变化的值 .

注意事项/问题:

  • 我想要更新的值,每五分钟就会从一个REST调用作为字符串 .

  • 我还没弄清楚如何更新Pygal图表的数据,因为在列表中插入字符串会导致错误(如下所示) .

  • 我不知道如何在下面的"class"中插入新的整数列表 .

  • 我这个例子只显示了五个数据点,但最终我可能需要多达100个数据点 .

  • 设置变量可能适用于静态数量的元素,但我的元素会偶尔增加和减少 .


import pygal

line_chart = pygal.HorizontalStackedBar()
line_chart.title = 'Application Health'
line_chart.x_labels = ( "cluster05", "cluster04", "cluster03", "cluster02", "cluster01")
line_chart.add('Critical', [2, 5, 4, 1, None])
line_chart.add('Warning',[1, 7, 2, None, 2])
line_chart.add('OK', [25, 30, 19, 20, 25])
line_chart.render_to_file('test_StackedBar.svg')

线型是以下类 .

>>> type(line_chart.add('OK', [25, 30, 19, 20, 25]))
<class 'pygal.graph.horizontalstackedbar.HorizontalStackedBar'>
>>>

newData = "21, 55, 35, 82, 47, 70, 60"
line_chart.add('OK',[newData])

TypeError: unsupported operand type(s) for +: 'int' and 'str'

newData = "21, 55, 35, 82, 47, 70, 60"
y = list(newData)
line_chart.add('OK',[y])
line_chart.render_to_file('test_StackedBar.svg')

TypeError: unsupported operand type(s) for +: 'int' and 'list'

1 回答

  • 0

    你有 TypeError . 它需要一个数字列表 .

    很容易将变量视为替换: y = [1,2,3] 表示存在 y 的任何地方,只需将 [1,2,3] 改为 . 所以,当你做 [y] 时,它很高兴用 [[1,2,3]] 替换它

    你给它一个包含单个字符串的列表: ["21, 55, 35, 82, 47, 70, 60"] ,然后将其传递到列表中: [["21, 55, 35, 82, 47, 70, 60"]] ,这不是它所期望的 .

    它需要一个整数列表:

    y = [21, 55, 35, 82, 47, 70, 60]
    line_chart.add('OK',y)
    

    要更新图表,您可能需要重建它(我不熟悉pygal,因此它可能支持编辑,但重建将始终有效)

    def update_chart(crit_values, warning_values, ok_values):
        line_chart = pygal.HorizontalStackedBar()
        line_chart.title = 'Application Health'
        line_chart.x_labels = ( "cluster05", "cluster04", "cluster03", "cluster02", "cluster01")
        line_chart.add('Critical', crit_values)
        line_chart.add('Warning', warning_values)
        line_chart.add('OK', ok_values)
        line_chart.render_to_file('test_StackedBar.svg')
    

    将允许您重建它并为每种类型传递新列表,方法是:

    update_chart([2, 5, 4, 1, None], [1, 7, 2, None, 2], [25, 30, 19, 20, 25])update_chart(x, y, z) 其中x,y,z是如上所示的整数列表 .

相关问题