使用来自Pandas DataFrame的vincent创建多线图

时间:2014-04-24 07:13:59

标签: python pandas dataframe vincent

我遇到了类似下列问题的问题:Creating a multiline graph using Vincent,但我找不到解决方案。

我想显示一个多线图,以便在聊天工具中获取当天每小时用户处理的讨论数量。
我有一个DataFrame,格式如下。左列表示小时数,左列表示用户每小时的讨论数量:

      user1  user2
...    ...    ...
8       0     0
9       1     0
10      0     0
11      0     0
12      11    0
...    ...   ...

注意:我没有显示所有DF但是我从0到23行。

我尝试使用以下代码来构建我的图表:

graph = vincent.Line(df)
graph.axis_titles(x='Hour', y='Number of discussions')
graph.legend(title="Users")

这给了我以下错误:

array is not broadcastable to correct shape

我确实得到了错误,我尝试了别的东西。 我在我的DF中将我的索引复制为系列,这给了我以下格式:

    user1  user2    hour
...    ...    ...   ...
8       0     0     8
9       1     0     9
10      0     0     10
11      0     0     11
12      11    0     12
...    ...   ...    ...

我尝试了以下代码:

graph = vincent.Line(df, iter_idx='hour')
graph.axis_titles(x='Hour', y='Number of discussions')
graph.legend(title="Users")

在这里,我没有得到任何错误,但在我链接的帖子中就像davidheller一样,我得到了一个没有任何行的图表,只有absicssa中的值为0。我想我的vincent.Line对象的参数不正确,但我不知道如何传递它们。 你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我所做的就是创建一个字典而不是数据框。

user_d = {}
for col in list(df.columns):
    user_d[col] = list(df[col])

user_d['index'] = df.index.tolist()

graph = vincent.Line(user_d, iter_idx='hour')
graph.axis_titles(x='Hour', y='Number of discussions')
graph.legend(title="Users")

希望这有帮助!