我正在尝试使用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'}
感谢您提供此渲染的任何帮助。
答案 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')
你最终应该得到以下内容:
希望这有帮助!