如何添加一条线来绘制直方图上的销售额,返回每个类别销售额总和的每月和每年的演变?
How to add a line plotting the number of sales on a histogram returning the evolution per month and per year of the sum of sales per category?
我使用 Plotly 绘制了一个直方图,返回按类别分组的销售额总和每月的演变。
仍然是 Plotly,我想在上面添加一行来跟踪销售数量的演变。我想为每个月获得一个显示销售数量的标记。
这是我用于直方图的代码:
import plotly.express as px
import plotly.graph_objects as go
fig = px.histogram(
dataset,
x="Years and month",
y="Price",
color="Category",
text_auto=".2f",
height=600,
width=980)
fig.update_layout(
bargap=0.2,
title_x=0.5)
fig.update_xaxes(
dtick="M1",
tickformat="%b\n%Y")
fig.show()
我尝试添加这行代码,但在我的栏底部只有一条沿 x 轴的直线:
fig.add_trace(go.Scatter(x=dataset["Years and month"], y=dataset["Price"],
mode='lines',
name="Sales"))
# I don't know what argument to put to have the count of dataset["Price"]
数据集的信息:
# dataset.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 679111 entries, 0 to 679331
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Price 679111 non-null float64
1 Category 679111 non-null int64
2 Years and month 679111 non-null object
dtypes: float64(1), int64(1), object(1)
memory usage: 20.7+ MB
None
这是我的数据集示例:
Price Category Years and month
16.07 1 2021-12
9.28 0 2021-07
3.99 0 2021-03
27.46 1 2021-11
15.81 1 2022-03
17.99 0 2022-09
16.99 1 2022-01
9.41 0 2021-12
9.99 0 2022-05
8.99 0 2021-04
除此之外的小问题:
我的数据集有 679532 个条目,当我在请求中过于贪婪时会影响我的 jupyter notebook(例如:go.scatter(mode="lines+markers") 会使我的笔记本崩溃)。
这是我的直方图的照片,具有所需的结果(用 Paint 绘制的黑色线条):
我终于自己找到了解决方案。
编辑:我将“年和月”列重命名为“年和月”
要使用 plotly.express 添加跟踪,您必须使用:
fig.add_traces(list(px.*the fig you want (ex: line; histogram; scatter; etc...)*(*all the arguments to trace your fig*).select_traces()))
要获得所需的聚合,您必须执行 groupby()
后跟要聚合的列。
为了获取销售的产品数量,必须使用hover_data=[]
并指明要聚合的数据,示例在这里:
hover_data=[dataset.groupby(
"Year and month")["Price"].count()]
要获得带有标记的行,请在 .select_traces()
之前添加 .update_traces(mode='lines+markers')
这里是解决方案的完整代码:
import plotly.express as px
fig = px.histogram(dataset,
x="Year and month",
y="Price",
color="Category",
text_auto=".2f",
height=600,
width=980)
fig.update_layout(bargap=0.2)
fig.update_xaxes(dtick="M1", tickformat="%b\n%Y")
fig.add_traces(
list(
px.line(dataset.groupby("Year and month")["Price"].sum(),
hover_data=[
dataset.groupby("Year and month")["Price"].count()
]).update_traces(mode='lines+markers').select_traces()))
fig.show()
这是结果的图片(文本是法语):
我使用 Plotly 绘制了一个直方图,返回按类别分组的销售额总和每月的演变。
仍然是 Plotly,我想在上面添加一行来跟踪销售数量的演变。我想为每个月获得一个显示销售数量的标记。
这是我用于直方图的代码:
import plotly.express as px
import plotly.graph_objects as go
fig = px.histogram(
dataset,
x="Years and month",
y="Price",
color="Category",
text_auto=".2f",
height=600,
width=980)
fig.update_layout(
bargap=0.2,
title_x=0.5)
fig.update_xaxes(
dtick="M1",
tickformat="%b\n%Y")
fig.show()
我尝试添加这行代码,但在我的栏底部只有一条沿 x 轴的直线:
fig.add_trace(go.Scatter(x=dataset["Years and month"], y=dataset["Price"],
mode='lines',
name="Sales"))
# I don't know what argument to put to have the count of dataset["Price"]
数据集的信息:
# dataset.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 679111 entries, 0 to 679331
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Price 679111 non-null float64
1 Category 679111 non-null int64
2 Years and month 679111 non-null object
dtypes: float64(1), int64(1), object(1)
memory usage: 20.7+ MB
None
这是我的数据集示例:
Price Category Years and month
16.07 1 2021-12
9.28 0 2021-07
3.99 0 2021-03
27.46 1 2021-11
15.81 1 2022-03
17.99 0 2022-09
16.99 1 2022-01
9.41 0 2021-12
9.99 0 2022-05
8.99 0 2021-04
除此之外的小问题: 我的数据集有 679532 个条目,当我在请求中过于贪婪时会影响我的 jupyter notebook(例如:go.scatter(mode="lines+markers") 会使我的笔记本崩溃)。
这是我的直方图的照片,具有所需的结果(用 Paint 绘制的黑色线条):
我终于自己找到了解决方案。
编辑:我将“年和月”列重命名为“年和月”
要使用 plotly.express 添加跟踪,您必须使用:
fig.add_traces(list(px.*the fig you want (ex: line; histogram; scatter; etc...)*(*all the arguments to trace your fig*).select_traces()))
要获得所需的聚合,您必须执行 groupby()
后跟要聚合的列。
为了获取销售的产品数量,必须使用hover_data=[]
并指明要聚合的数据,示例在这里:
hover_data=[dataset.groupby(
"Year and month")["Price"].count()]
要获得带有标记的行,请在 .select_traces()
.update_traces(mode='lines+markers')
这里是解决方案的完整代码:
import plotly.express as px
fig = px.histogram(dataset,
x="Year and month",
y="Price",
color="Category",
text_auto=".2f",
height=600,
width=980)
fig.update_layout(bargap=0.2)
fig.update_xaxes(dtick="M1", tickformat="%b\n%Y")
fig.add_traces(
list(
px.line(dataset.groupby("Year and month")["Price"].sum(),
hover_data=[
dataset.groupby("Year and month")["Price"].count()
]).update_traces(mode='lines+markers').select_traces()))
fig.show()
这是结果的图片(文本是法语):