2

Vincent を使用して複数行グラフを作成しようとしています。

次のレイアウトの csv ファイルがあります。

,wk1,wk2,wk3,wk4,wk5,wk6,wk7,wk8,wk9
Tom J,97,65,82,65,101,84,79,71,83
Lisa R,95,87,95,65,61,78,93,95,56
Rich F,51,111,50,119,84,77,73,84,60
Anne E,63,68,89,70,95,80,56,75,82
Dan M,83,95,36,115,79,79,65,55,69
Mack W,67,89,72,79,47,64,113,94,33

これが私のコードです:

import pandas as pd
import vincent

df = pd.read_csv('weekscores.csv', index_col=0)

lines = vincent.Line(df)
lines.axis_titles(x='WEEKS', y='SCORE')
lines.legend(title='Player')
lines.to_json('line.html',html_out=True,html_path='line_template.html')

これが実行され、グラフが生成されますが、グラフに線が表示されません。

ここに画像の説明を入力

.grammar() を使用してデータを検査すると、毎週のスコアが次のようになります。

{'val': 97, 'col': 'wk1', 'idx': 'Tom J'}

これをレンダリングするための支援をいただければ幸いです。

4

1 に答える 1

8

ここには 2 つの問題があります。1 つ目は、Vincent が (単純に) 折れ線グラフが線形スケールになると想定していることです。この場合、実際には序数スケールが必要です。2 番目の問題は、週がインデックスに含まれるようにデータフレームを転置する必要があることです。したがって、探しているプロットを取得するには:

import vincent
import pandas as pd

df = pd.read_csv('weekscores.csv', index_col=0)
df = df.T
df
Out[27]: 
Name  Tom J  Lisa R  Rich F  Anne E  Dan M  Mack W
wk1      97      95      51      63     83      67
wk2      65      87     111      68     95      89
wk3      82      95      50      89     36      72
wk4      65      65     119      70    115      79
wk5     101      61      84      95     79      47
wk6      84      78      77      80     79      64
wk7      79      93      73      56     65     113
wk8      71      95      84      75     55      94
wk9      83      56      60      82     69      33

データを反転したので、折れ線グラフを作成し、x スケールが序数であることを確認できます。

lines = vincent.Line(df)
lines.scales[0].type = 'ordinal'
lines.axis_titles(x='WEEKS', y='SCORE')
lines.legend(title='Player')

次のような結果になるはずです。

折れ線グラフ

お役に立てれば!

于 2013-11-19T06:28:56.340 に答える