如何使用PYGAL与字符串记录制作条形桌



我正在使用pygal创建表,链接中的示例效果很好,但是我做了以下更改。

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表中包含字符串记录?

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

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

Pygal在这里所做的工作正在掌握一个函数,以应用于每个表值,以便将字符串值输出以将其放入实际表中。在这种情况下,格式化器采用数字(int或float(,并使用旧格式语法进行格式化。'%.2f%%' % x basically说:"我要将X放在此处,修改字符串表示形式,以便它迫使至少两个小数点位置,然后在末端添加'%'符号"。此外,此lambda函数在执行此操作之前检查该值是否不是None,因为以这种方式格式化字符串值不会与无值一起使用,因为它不是数字,并且输出该null字符。

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

您想要字符串记录,因此要更改此内容,您可以添加类型(IE使用type(value) == int(的支票,或者如果您还想使用字符串整数,请先尝试转换(即int(value)float(value)(。有关INT检查字符串的更多详细信息,请参见这篇文章。

您的格式化lambda功能可能会变成:

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

如果您想执行类似转换检查器之类的事情,则必须尝试:catch:it:它,因此您需要制作一个实际的格式化功能而不是lambda。

最新更新