【问题标题】:Create a multiline graph using vincent from a Pandas DataFrame使用 Pandas DataFrame 中的 vincent 创建多线图
【发布时间】:2014-04-24 07:13:59
【问题描述】:

我遇到了与以下类似的问题: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")

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

【问题讨论】:

    标签: python pandas dataframe vincent


    【解决方案1】:

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2014-08-26
      • 2017-08-19
      • 2018-08-13
      • 2021-08-17
      • 1970-01-01
      • 2017-08-03
      相关资源
      最近更新 更多