【问题标题】:How to plot time series stacked bar chart using plotly python如何使用plotly python绘制时间序列堆积条形图
【发布时间】:2020-02-08 14:15:22
【问题描述】:

我在 pandas df_res 中有以下数据框,我们可以用如图所示的几行来调用它。

   date       time      weekday      team    recipient
 2019-08-30 14:49:22    Friday      team1   building308@list.com
 2019-08-30 05:57:51    Friday      team1   notification@listcom
 2019-08-29 22:54:58    Thursday    team1   robert.r@gmail.com
 2019-08-29 22:54:58    Thursday    team1   emcor@list.com
 2019-08-30 06:26:12    Friday      team1   building308@list.com
 2019-09-05 14:16:22    Thursday    team1   pqr@xyz.com
 2019-09-05 14:16:22    Thursday    team1   flash_hvac@list.com
 2019-09-04 22:54:59    Wednesday   team1   robert.r@gmail.com
 2019-09-04 22:54:59    Wednesday   team1   emcor@list.com

我想绘制一个图表,其中 x 轴是从 2019 年 6 月到 2019 年 10 月的日期。y 轴是收件人在给定日期收到电子邮件的次数。所以我想做一个堆积条形图,每个堆栈都是一个接收者。例如:在“2019-08-30”日期,“building308@list.com”有 2 封邮件,“notification@listcom”有 1 封邮件。所以那天我会有两堆。我还希望能够提供我感兴趣的几个收件人的列表。我编写了下面的代码来做同样的事情,但我正在努力计算收件人的数量。相反,如果计数是一个列表或列,我可以绘制,但这对我没有用,因为数据框很大,有超过一千行。

import plotly.graph_objects as go
import datetime


x = [datetime.datetime(year=2019, month=06, day=4),
 datetime.datetime(year=2019, month=11, day=5),
 datetime.datetime(year=2019, month=13, day=6)]
y = [2, 2, 5]

 fig = go.Figure(data=[go.Bar(x=x, y=y)])
 # Use datetime objects to set xaxis range
 fig.update_layout(xaxis_range=[datetime.datetime(2019, 06, 17),
                           datetime.datetime(2019, 10, 7)])
 fig.show()

更新以添加代码:2019 年 10 月 11 日 # 绘制值

    trace = go.Bar(
           x=[datetime.datetime(year=2019, month=8, day=1),
              datetime.datetime(year=2019, month=10, day=1)],
           y=[res_test['recipients'].value_counts()],
           name='Plot the values '
          )

      data = [trace]
      layout = go.Layout(title="Emails per volunteer", xaxis= 
                 {'title':'Date'}, yaxis={'title':'Email count'},
               barmode='stack'
                )


       fig = go.Figure(data=data, layout=layout)
       py.iplot(fig)

这就是我将值传递到 y 轴的方式吗?

【问题讨论】:

    标签: python python-3.x pandas plotly-python


    【解决方案1】:

    数据准备

    date =['2019-08-30 14:49:22',
           '2019-08-30 05:57:51',
           '2019-08-29 22:54:58',
           '2019-08-29 22:54:58',
           ]
    rec = ['building308@list.com','building308@list.com','emcor@list.com','pqr@xyz.com']
    data = pd.DataFrame({
             'date':date,
             'recipient':rec
             })
    

    示例数据框:

    data
                   date             recipient date_extract
    0 2019-08-30 14:49:22  building308@list.com   2019-08-30
    1 2019-08-30 05:57:51  building308@list.com   2019-08-30
    2 2019-08-29 22:54:58        emcor@list.com   2019-08-29
    3 2019-08-29 22:54:58           pqr@xyz.com   2019-08-29
    
    # Extract date from date_timestamp
    data['date'] = pd.to_datetime(data['date'])
    data = data.assign(date_extract = [str(i.date()) for i in data['date']])
    

    获取电子邮件计数:每天的电子邮件总数

    new_data = data.groupby(by=['date_extract','recipient']).size()
    print(new_data)
    
    date_extract  recipient           
    2019-08-29    emcor@list.com          1
                  pqr@xyz.com             1
    2019-08-30    building308@list.com    2
    

    由于 new_data 是系列,您可以直接将其传递给绘图中的 x 或 y 参数。

    收件人总数

    recipient_frequency = data['recipient'].value_counts()
    
    # Recipient distribution
    recipient_frequency
    Out[]: 
    building308@list.com    2
    emcor@list.com          1
    pqr@xyz.com             1
    Name: recipient, dtype: int64
    
    # Total recipient count
    len(recipient_frequency)
    Out[]: 3
    

    如果您对 plotly - plots 有疑问,请在此处参考一些教程:https://github.com/SayaliSonawane/Plotly_Offline_Python

    【讨论】:

    • 非常感谢!最有帮助的 - 所有步骤和教程链接。我在您的 github 中没有看到条形图教程。也许你可以制作这个用例并提供一个这样它会有所帮助。我更新了我的代码以绘制值,但是虽然我能够在 x 轴上看到日期范围并在 y 轴上看到电子邮件计数,但没有绘制任何内容。
    • 我现在添加了条形图教程。希望对您有所帮助。
    • 如果没有帮助,我很抱歉。 github.com/SayaliSonawane/Plotly_Offline_Python/tree/master/…我创建了一个新教程。希望对您有所帮助。
    • 谢谢萨亚利。我很感激你的努力。上周我以不同的方式解决了我的问题,我会稍后更新帖子。但我相信您的教程会对阅读此页面以寻求 plotly 帮助的人们有所帮助。
    • @py_noob 到目前为止,您已经收集了足够多的代表,可以用您的支持来奖励其他用户。如果您发现 Sayalis 的努力有帮助,那么大多数用户都会高度赞赏您的支持。作为新用户,使用您的赞成票甚至可以为您赢得徽章。
    猜你喜欢
    • 2017-04-11
    • 2015-09-28
    • 2020-01-27
    • 2021-05-14
    • 2018-03-10
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2019-06-15
    相关资源
    最近更新 更多