Как сделать барную таблицу с помощью 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?


person Alpha Geek    schedule 20.04.2017    source источник


Ответы (1)


Чтобы понять вашу проблему, вам нужно понять эту строку:

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

что pygal здесь делает, так это принимает функцию, которая применяется к каждому значению таблицы, чтобы получить строковое значение для помещения в фактическую таблицу. В этом случае средство форматирования принимает число (int или float) и использует для форматирования старый синтаксис форматирования. '%.2f%%' % x basically говорит: «Я поставлю здесь x, изменю строковое представление так, чтобы в нем было как минимум два десятичных знака, а затем добавлю в конец символ '%'». Кроме того, эта лямбда-функция проверяет, не является ли значение None, прежде чем делать это, потому что форматирование строкового значения таким образом не будет работать со значением None, поскольку оно не является числом, и выводит этот нулевой символ.

В исходном примере все табличные значения были числовыми. После того, как вы заменили столбец/строку firefox строковыми значениями, средство форматирования не могло работать. Ваша ошибка связана с тем, что функция lambda x: '%.2f%%' % x if x is not None else '∅' не может быть применена к строковым значениям. Чтобы исправить это, вы можете либо A: изменить средство форматирования, чтобы принимать строковые значения, либо B: изменить значения в firefox, чтобы использовать числа вместо строк.

Вам нужны строковые записи, поэтому, чтобы изменить это, вы можете добавить проверку типа (т. е. с использованием type(value) == int) или, если вы также хотите использовать строковые целые числа, сначала попробуйте преобразование (т. е. int(value) или float(value)). Подробнее о проверке int для струны.

Ваша лямбда-функция форматирования может, например, стать:

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

если вы хотите сделать что-то вроде средства проверки преобразования, вам придется попробовать: catch: это, поэтому вам нужно будет создать настоящую функцию форматирования вместо лямбда.

person Krupip    schedule 27.04.2017