使用Pandas DataFrame中的vincent创建多行图形



我遇到了一个类似于以下问题的问题:使用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")

在这里,我没有错,但就像我链接的帖子中的davideller一样,我得到了一个没有任何线条的图,只有absicssa中的值0。我猜我的vincent参数。线条对象不正确,但我不知道如何通过它们。你知道吗?

我遇到了同样的问题,我最终做的是创建一个字典而不是数据帧。

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

希望这能有所帮助!

最新更新