【问题标题】:How to make a bar table using pygal with string records.?如何使用带有字符串记录的 pygal 制作条形表。?
【发布时间】:2017-04-20 13:38:17
【问题描述】:

我正在使用pygal 创建表,link 中的示例运行良好, 但我做了以下更改。

line_chart = pygal.Bar()
line_chart.title = 'Browser usage evolution (in %)'
line_chart.x_labels = map(str, range(2002, 2013))
line_chart.add('Firefox', ["Hello", 'world', 'aaa', 'bbbb',   'ccc',   'cccc', 'dddd', 'eee', 'ffff', 'gggg', 'hhhh'])
line_chart.add('Chrome',  [None, None, None, None, None, None,    0,  3.9, 10.8, 23.8, 35.3])
line_chart.add('IE',      [85.8, 84.6, 84.7, 74.5,   66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])
line_chart.add('Others',  [14.2, 15.4, 15.3,  8.9,    9, 10.4,  8.9,  5.8,  6.7,  6.8,  7.5])
line_chart.value_formatter = lambda x: '%.2f%%' % x if x is not None else '∅'
line_chart.render_table(style=True)

对于 Firefox 列,我在列表中添加字符串值,它给了我这样的错误:

TypeError: 不支持的操作数类型 -: 'str' 和 'int'

如何在 pygal 表中包含字符串记录?

【问题讨论】:

    标签: python pygal


    【解决方案1】:

    要了解您的问题,您需要了解这一行:

    line_chart.value_formatter = lambda x: '%.2f%%' % x if x is not None else '∅'
    

    pygal 在这里所做的是接收一个函数以应用于每个表值,以便将字符串值放入实际表中。在这种情况下,格式化程序接受一个数字(int 或 float)并使用旧的格式化语法进行格式化。 '%.2f%%' % x basically 说“我要把 x 放在这里,修改字符串表示,使其强制至少保留两位小数,然后在末尾添加一个 '%' 符号”。此外,此 lambda 函数在执行此操作之前检查该值是否不是 None,因为以这种方式格式化字符串值不适用于 None 值,因为它不是数字,并输出该空字符。

    在原始示例中,所有表值都是数值。一旦用字符串值替换了 firefox 列/行,格式化程序就无法工作。您的错误来自函数 lambda x: '%.2f%%' % x if x is not None else '∅' 无法应用于字符串值。为了解决这个问题,您可以 A:更改格式化程序以接受字符串值或 B:更改 Firefox 中的值以使用数字而不是字符串。

    您想要字符串记录,所以要更改它,您可以添加类型检查(即使用type(value) == int),或者如果您还想使用字符串整数,请先尝试转换(即int(value)float(value)) .有关 int 检查字符串的更多详细信息,请参阅this post

    您的格式化程序 lambda 函数可能会变成:

    lambda x: '%.2f%%' % x if type(x) is int or type(x) is float else '∅'
    

    如果您想执行转换检查器之类的操作,则必须尝试:catch:it,因此您需要创建一个实际的格式化函数而不是 lambda。

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2011-05-15
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多