如何使用 Plotly Express 制作一维直方图,而不为每行的相同值创建新的 x 值?

发布于 2025-01-11 08:54:11 字数 723 浏览 0 评论 0原文

这就是我的情节的实际情况: 当前输出

这是数据框:DataFrame

这是我当前的代码:


import pandas as pd
import plotly.express as px

pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)

df = pd.read_csv('sales.csv')

df.columns = df.columns.str.replace(' ', '')

fig= px.bar(df, x='number', y='number', color='profit')
fig.show()

如您所见,销售数字很多倍相同,所以我想要绘制直方图每个 x 值都是具有相同关键编号的所有销售的总利润,因此我可以比较每个销售关键编号的利润。

我怎样才能使用 Pandas 和情节表达来做到这一点?

ps:我对这一切真的是菜鸟

This is how my plot actually is: current output

This is the Data Frame: DataFrame

This is my current code:


import pandas as pd
import plotly.express as px

pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)

df = pd.read_csv('sales.csv')

df.columns = df.columns.str.replace(' ', '')

fig= px.bar(df, x='number', y='number', color='profit')
fig.show()

As you can see, the sales numbers are many times the same, so i want to plot a histogram being each x value the total profit of all sales with the same key number, so i can compare the profit of each sales key number.

How can i do that using Pandas and plotly express?

ps: I'm a real noobie with all this

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

默嘫て 2025-01-18 08:54:11
  • 你的数据框有问题。对其进行了模拟并使用您的代码来生成图形。它生成一个非常不同的图形(参见下面的第一张图)
    • 我怀疑您的数据框有问题,数字列不是数字而是字符串。检查 df.dtypes
    • 这由 xaxis 无序表示,并且 color 不生成颜色条,而是使用顺序颜色
  • 已经证明了通过销售数量获取总利润的方法。首先使用pandas聚合,然后将数字绘制为x轴,将利润绘制为y轴
import numpy as np
import pandas as pd
import plotly.express as px

# simulate data frame
df = pd.DataFrame({"number": np.repeat(np.arange(3334, 3389), 6)}).pipe(
    lambda d: d.assign(profit=np.random.uniform(-10, 200, len(d)))
)

# question approach
fig = px.bar(df, x="number", y="number", color="profit")
fig.show()

# requested approach
fig = px.bar(
    df.groupby("number", as_index=False).agg({"profit": "sum"}), x="number", y="profit"
).update_layout(xaxis={"type": "category"})

fig.show()

在此处输入图像描述

  • there is something up with your data frame. Have simulated it and used your code to generate figure. It generates a very different figure (see first image below)
    • I suspect there is something up with your dataframe, number columns are not numbers but strings. check df.dtypes
    • this is implied by xaxis being unordered and the fact color does not generate a color bar, but uses sequential colors
  • have demonstrated approach to getting total profit by sales number. Aggregate first with pandas then plot number as xaxis and profit as yaxis
import numpy as np
import pandas as pd
import plotly.express as px

# simulate data frame
df = pd.DataFrame({"number": np.repeat(np.arange(3334, 3389), 6)}).pipe(
    lambda d: d.assign(profit=np.random.uniform(-10, 200, len(d)))
)

# question approach
fig = px.bar(df, x="number", y="number", color="profit")
fig.show()

# requested approach
fig = px.bar(
    df.groupby("number", as_index=False).agg({"profit": "sum"}), x="number", y="profit"
).update_layout(xaxis={"type": "category"})

fig.show()

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文