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 之前,您需要 groupby
和 count
pandas 中的行。此外,您的样本没有显示它,但是如果您希望同一个月内有不同的日期并且您只关心 year/month 那么您需要在分组之前应用一些舍入(或从日期中提取年份和月份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
我正在尝试创建一个简单的折线图,其中 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 之前,您需要 groupby
和 count
pandas 中的行。此外,您的样本没有显示它,但是如果您希望同一个月内有不同的日期并且您只关心 year/month 那么您需要在分组之前应用一些舍入(或从日期中提取年份和月份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