为什么我的 x 轴刻度在 plotly 图中没有正确排序 [英] why does my x axis ticks are not sorted properly in plotly graph

查看:14
本文介绍了为什么我的 x 轴刻度在 plotly 图中没有正确排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试绘制几周内的销售趋势.但是在 x 轴上,刻度的排序顺序不正确,这让我的图表看起来很奇怪.

I am trying to plot a sales trend, over the weeks. But in the x axis, the ticks are not in proper sorted order, there by making my graph look weird.

图表:

如您所见,带圆圈的星期,需要进入起点或轴.为什么即使在我对数据框中的日期进行了排序之后也会发生这种情况?

As you can see , the circled week , needs to come in starting or the axis. Why does this happen like this even after I have sorted the dates in the dataframe ?

熊猫代码:

basic_df = filterDataFrameByDate(df,start_date,end_date)
df = basic_df.groupby(['S2PName',basic_df['S2BillDate'].dt.to_period(flag)], sort=False)['S2PGTotal'].agg([('totSale','sum'),('count','size')]).reset_index()
df.sort_values('S2BillDate',inplace=True)
df['S2BillDate'] = df['S2BillDate'].astype('str')

我还注意到的另一件事是,当我从传说中取消选择萨摩萨"时,刻度线排列正确.

Also one more thing that I notices is, when i de-select 'Samosa' from the legends , the ticks are arranged properly.

截图:

有人可以帮我解决这个问题吗?

Can anybody help me out with this please ?

熊猫代码和数据:

代码:

 print(df['S2BillDate'].unique())

操作:

    <PeriodArray>
['2020-02-03/2020-02-09', '2020-02-10/2020-02-16', '2020-02-17/2020-02-23',
 '2020-02-24/2020-03-01']
Length: 4, dtype: period[W-SUN]

代码:

   df = basic_df.groupby(['S2PName',basic_df['S2BillDate'].dt.to_period(flag)], sort=False)['S2PGTotal'].agg([('totSale','sum'),('count','size')]).reset_index()

操作:

[537 rows x 4 columns]
                          S2PName             S2BillDate   totSale  count
0                          SAMOSA  2020-02-10/2020-02-16   4057.89    228
1                          COFFEE  2020-02-10/2020-02-16  10567.21    582
2                             TEA  2020-02-10/2020-02-16   6808.92    445
3                           POORI  2020-02-10/2020-02-16   7556.77    179
4                          PONGAL  2020-02-10/2020-02-16   4758.97    122
..                            ...                    ...       ...    ...
411                PEPPER CHICKEN  2020-02-24/2020-03-01     90.00      1
412  SEZWAN CHICKEN FRIED NOODLES  2020-02-24/2020-03-01    199.50      2
413         SEZWAN VEG FRIED RICE  2020-02-24/2020-03-01     69.83      1
414         SEZWAN EGG FRIED RICE  2020-02-24/2020-03-01     89.78      1
415                    EGG MASALA  2020-02-24/2020-03-01     50.04      1

推荐答案

我可以重现你的问题.我正在使用 plotly.express 但它与 plotly.graph_objs

I could reproduce your problem. I'm using plotly.express but it works in the same way with plotly.graph_objs

import pandas as pd
import plotly.express as px

df = pd.DataFrame({"SPName":["SAMOSA"]*3+ ["COFFEE"]*4,
                   "S2BillDate":["2020-02-10/2020-02-16",
                                 "2020-02-17/2020-02-23",
                                 "2020-02-24/2020-03-01",
                                 "2020-02-24/2020-03-01",
                                 "2020-02-17/2020-02-23",
                                 "2020-02-10/2020-02-16",
                                 "2020-02-03/2020-02-09"],
                    "totSale":[4000, 4500, 5000, 10_000, 12_000, 10_000, 2000]})

这个产品

fig = px.line(df, x="S2BillDate", y="totSale", color="SPName")
fig.update_traces(mode='markers+lines')
fig.show()

这里的问题是日期是如何排序的.如果您看到 COFFEE 的第一点是 2020-02-24/2020-03-01 第二个 2020-02-17/2020-02-23 以此类推.

Here the problem is how dates are sorted. If you see the first point for COFFEE is 2020-02-24/2020-03-01 the second 2020-02-17/2020-02-23 ans so on.

快速修复将是

df1 = df.sort_values("S2BillDate").reset_index(drop=True)

fig = px.line(df1, x="S2BillDate", y="totSale", color="SPName")
fig.update_traces(mode='markers+lines')

我个人更喜欢在 xaxis

df["Date"] = df["S2BillDate"].str.split("/").str[1].astype("M8")
fig = px.line(df, x="Date", y="totSale", color="SPName")
fig.update_traces(mode='markers+lines')
```[![enter image description here][3]][3]

but in this case in order to show the ticktext in the format you asked for you still need to sort `df` and in this case there you need more coding.

```python
df = df.sort_values(["Date"]).reset_index(drop=True)
fig = px.line(df, x="Date", y="totSale", color="SPName")
fig.update_traces(mode='markers+lines')
fig.update_layout(
    xaxis = dict(
        type="category",
        tickmode = 'array',
        tickvals = df["Date"].tolist(),
        ticktext = df["S2BillDate"].tolist()
    )
)
fig.show()

这篇关于为什么我的 x 轴刻度在 plotly 图中没有正确排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆