2017-04-20 12 views
0

pygalを使用してテーブルを作成していますが、linkの例はうまく動作しますが、 ですが、以下の変更を行いました。私は、リスト内の文字列値を追加していFirefoxの列の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) 

、次のように私にエラーを与えている:私はpygalテーブル内の文字列のレコードを含めることができますどのように

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

答えて

0

この行を理解する必要があるとしているあなたの問題を理解するために:

line_chart.value_formatter = lambda x: '%.2f%%' % x if x is not None else '∅' 
て文字列値を取得するために、各テーブル値に適用する機能に取っているものpygalここでやっている

実際のテーブルに入れる。この場合、フォーマッタは数値(intまたはfloat)を取り、書式設定に古い書式構文を使用します。 '%.2f%%' % x basicallyは "私はここにxを入れ、少なくとも2桁の小数点以下を強制するように文字列表現を変更してから、最後に '%'記号を追加します。さらに、このラムダ関数は、この方法で文字列値の書式設定が数値ではないため、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を参照してください。ラムダの代わりに実際のフォーマッタ関数。

関連する問題