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

Plotly - How to add count of rows to Y axis on line chart?

我正在尝试创建一个简单的折线图,其中 X 轴为日期字段,Y 轴为行数。我正在使用以下代码:

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/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 轴上显示的是项目名称,而不是每个日期的项目数。

有谁知道如何添加行数以便在折线图上显示 Date 的每个月的项目数?

您可以通过 Matplotlib's 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)

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

在发送到 plotly 之前,您需要 groupbycount pandas 中的行。此外,您的样本没有显示它,但是如果您希望同一个月内有不同的日期并且您只关心 year/month 那么您需要在分组之前应用一些舍入(或从日期中提取年份和月份data['Date'].dt.yeardata['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