2

我正在尝试使用文森特创建多线图。

我有一个具有以下布局的 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

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

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 回答