为了账号安全,请及时绑定邮箱和手机立即绑定

Plotly - 如何将行数添加到折线图上的 Y 轴?

Plotly - 如何将行数添加到折线图上的 Y 轴?

慕容森 2023-09-05 19:46:58
我正在尝试创建一个简单的折线图,其中 X 轴上包含日期字段,Y 轴上包含行数。我使用以下代码:import plotly.express as pxdata = {'Project':  ['Project 1', 'Project 2', ' Project 3', 'Project 4', 'Project 5', 'Project 6', 'Project 7', 'Project 8', 'Project 9', 'Project 10'],        'Date': ['10/1/2020', '10/1/2020', '11/1/2020', '12/1/2020', '12/1/2020', '12/1/2020', '2/1/2021', '2/1/2021', '3/1/2021', '4/1/2021']}df2 = pd.DataFrame(data, columns = ['Project','Date'])fig = px.line(df2, x= "Date", y = "Project", title='<b>Project</b>')fig.show()但是,当我这样做时,项目名称位于 X 轴上,而不是每个日期的项目计数。有谁知道如何添加行数,以便在折线图上显示每个日期的项目数?
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

在发送到绘图之前,您需要groupby和countpandas 中的行进行比较。另外,您的示例没有显示它,但是如果您期望同一个月内有不同的日期并且您只关心年/月,那么您需要在分组之前应用一些舍入(或从日期中提取年和月data['Date'].dt.year,data['Date'].dt.month无论你喜欢哪个)。


取这个稍微不同的样本,其中添加了 10/2


import plotly.express as px


data = {'Project':  ['Project 1', 'Project 2', ' Project 3', 'Project 4', 'Project 5', 'Project 6', 'Project 7', 'Project 8', 'Project 9', 'Project 10'],

        'Date': ['10/1/2020', '10/2/2020', '11/1/2020', '12/1/2020', '12/2/2020', '12/1/2020', '2/1/2021', '2/1/2021', '3/1/2021', '4/1/2021']}


df2 = pd.DataFrame(data, columns = ['Project','Date'])

df2['Date'] = pd.to_datetime(df2['Date'])


df_grouped = (

    df2.groupby(

        # normalize all dates to start of month

        df2['Date'].astype('datetime64[M]')

    )['Project'].count().rename('Count').to_frame()

)

df_grouped['Names'] = (

    df2.groupby(df2['Date'].astype('datetime64[M]')

    )['Project'].agg(',<br>    '.join)

)


print(df_grouped)


fig = px.line(

    df_grouped, y='Count', title='<b>Projects per month</b>',

    hover_data=['Names']

)

fig.write_html('fig1.html', auto_open=True)

更新:根据要求,此新代码在悬停时显示项目名称。


输出


            Count                                          Names

Date

2020-10-01      2                    Project 1,<br>    Project 2

2020-11-01      1                                      Project 3

2020-12-01      3  Project 4,<br>    Project 5,<br>    Project 6

2021-02-01      2                    Project 7,<br>    Project 8

2021-03-01      1                                      Project 9

2021-04-01      1                                     Project 10

https://img1.sycdn.imooc.com//64f715640001626a09120439.jpg

查看完整回答
反对 回复 2023-09-05
?
倚天杖

TA贡献1828条经验 获得超3个赞

您可以使用Matplotlib 的 hist轻松实现这一点

例子:

from datetime import datetime

import matplotlib

import pandas as pd

from matplotlib.pyplot import hist


df = pd.DataFrame(

    {'a': [1, 2, 3, 4]}, 

    index=[datetime(2020, 9, 24), 

           datetime(2020, 9, 24), 

           datetime(2020, 9, 24), 

           datetime(2020, 9, 25)]

)


hist(df.index)

https://img1.sycdn.imooc.com/64f715790001a76106510350.jpg

不是最漂亮的直方图,但我相信您可以从这里根据您的需要调整它;)



查看完整回答
反对 回复 2023-09-05
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信