如何添加一条线来绘制直方图上的销售额,返回每个类别销售额总和的每月和每年的演变?

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()

这是结果的图片(文本是法语):