使用Vincent创建多线图

时间:2013-11-05 06:25:44

标签: python pandas vega vincent

我正在尝试使用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')

这会运行并生成图表,但图表中不会显示任何行:

enter image description here

使用.grammar()检查数据我看到每周的得分都是这样的:

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

感谢您提供此渲染的任何帮助。

1 个答案:

答案 0 :(得分:8)

这里有几个问题:第一个是文森特(天真地)假设折线图将采用线性尺度,在这种情况下我们实际需要一个序数尺度。第二个问题是数据框需要转置,以便周数在索引上。所以,要获得你正在寻找的情节:

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')

你最终应该得到以下内容:

Linechart

希望这有帮助!