如何使用plotly python绘制时间序列堆叠条形图

如何使用plotly python绘制时间序列堆叠条形图,python,python-3.x,pandas,plotly-python,Python,Python 3.x,Pandas,Plotly Python,我在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 T

我在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'和1个'notification@listcom'. 所以那天我会有两堆。我也希望能够提供一个名单的几个收件人的电子邮件计数我感兴趣。我写了下面的代码来做同样的事情,但我正在努力弄清楚如何计算收件人的数量。相反,如果计数是一个列表或列,我可以绘图,但这对我来说是没有用的,因为数据帧是巨大的,有一千多行

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年11月10日 #绘制值

    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轴的方式吗

数据准备 示例数据帧: 获取电子邮件数量:每天的电子邮件总数 由于新的_数据是系列数据,您可以直接将其传递到plotly中的x或y参数

收件人总数 如果plotly-plots有问题,请参阅此处的一些教程:

数据准备 示例数据帧: 获取电子邮件数量:每天的电子邮件总数 由于新的_数据是系列数据,您可以直接将其传递到plotly中的x或y参数

收件人总数
如果您对plotly-plots有疑问,请参阅此处的一些教程:

非常感谢!最有用的-所有步骤和教程链接。我在github中没有看到条形图教程。也许你可以制作这个用例并提供一个这样它会很有帮助。我更新了我的代码来绘制值,但是尽管我能够在x轴上看到日期范围,在y轴上看到电子邮件计数,但没有绘制任何内容。我现在添加了条形图教程。希望这会有帮助。如果没有帮助,我很抱歉。我已经创建了一个新的教程。希望对你有帮助。谢谢你,萨利。我感谢你的努力。上周我用另一种方式解决了我的问题,稍后我会更新这篇文章。但我相信你的教程对那些阅读本页以搜索有关plotly的帮助的人会有所帮助。@py_noob现在你已经收集了足够的代表,可以用你的支持票奖励其他用户。如果您觉得Sayalis的努力很有帮助,那么大多数用户都会高度赞赏向上投票。作为一个新用户,使用你的投票甚至可以为你赢得一枚徽章。非常感谢!最有用的-所有步骤和教程链接。我在github中没有看到条形图教程。也许你可以制作这个用例并提供一个这样它会很有帮助。我更新了我的代码来绘制值,但是尽管我能够在x轴上看到日期范围,在y轴上看到电子邮件计数,但没有绘制任何内容。我现在添加了条形图教程。希望这会有帮助。如果没有帮助,我很抱歉。我已经创建了一个新的教程。希望对你有帮助。谢谢你,萨利。我感谢你的努力。上周我用另一种方式解决了我的问题,稍后我会更新这篇文章。但我相信你的教程对那些阅读本页以搜索有关plotly的帮助的人会有所帮助。@py_noob现在你已经收集了足够的代表,可以用你的支持票奖励其他用户。如果您觉得Sayalis的努力很有帮助,那么大多数用户都会高度赞赏向上投票。作为一个新用户,使用你的投票甚至可以为你赢得一枚徽章。
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
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