【发布时间】:2021-08-24 19:10:42
【问题描述】:
我有一个数据系列,其中包含各个会计年度的月销售额。我正在使用pandas 数据框来存储数据。每个会计年度从三月的第一天开始,到次年二月的最后一天结束。我正在使用plotly 平面图来显示一年中垂直对齐的月份,因此 2021 年 3 月低于 2020 年 3 月,依此类推。
尽管对 x 轴使用了分类变量,但排序略有偏差。我尝试使用具有唯一值的“yearmon”变量进行排序,但这也不起作用。具体来说,在下图中,2018 年 1 月和 2 月的值是空白的,2021 年 1 月和 2 月的值也不合适。我怎样才能在没有这些问题的情况下获得显示连续数据的方面? 编辑:我感觉它与类别的顺序有关,但还没有设法确定。
import pandas as pd
import numpy as np
import plotly.express as px
import chart_studio.plotly as py
rng = np.random.default_rng(12345)
df = pd.DataFrame(rng.integers(80, 100, size=(36, 1)), columns=list('A'))
df.index = pd.date_range("2018-03-01", periods=36, freq="M")
df['year'] = df.index.strftime('%Y')
df['month'] = df.index.strftime('%b')
df['monthindex'] = df.index.strftime('%m')
df['yearmon'] = df['year']+df['monthindex']
month_categories = ['Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec','Jan','Feb']
df["month"] = pd.Categorical(df["month"], categories = month_categories)
df = df.sort_values(by = "yearmon")
fig = px.bar(df, x = 'month', y = 'A', facet_col='year', facet_col_wrap=1)
py.image.save_as(fig, 'plotly.png', width=1000, height=500)
更新
使用下面@vestland 的代码作为基础,我根据下面的评论调整了开始日期和财政年度分配,因为财政年度通常与日历年不一致。此外,数据系列的长度是任意的——可能是几个月,也可能是十年——开始和结束月份也是如此。最后,我希望 x 轴以财政年度的第一个月和最后几个月开始和结束,所以在这种情况下(三月和二月)“三月”应该是左边的第一个刻度线,“二月”右边的最后一个。如果不够清楚,我深表歉意。
import pandas as pd
import numpy as np
import plotly.express as px
import chart_studio.plotly as py
rng = np.random.default_rng(12345)
df = pd.DataFrame(rng.integers(80, 100, size=(36, 1)), columns=list('A'))
df.index = pd.date_range("2018-01-01", periods=36, freq="M")
df['year'] = df.index.strftime('%Y')
df['month'] = df.index.strftime('%b')
df['monthindex'] = df.index.strftime('%m')
df['yearmon'] = df['year']+df['monthindex']
month_categories = ['Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec','Jan','Feb']
df["month"] = pd.Categorical(df["month"], categories = month_categories)
df = df.sort_values(by = "yearmon")
df['fiscal_year'] = [2017]*2+[2018]*12+[2019]*12+[2020]*10
fig = px.bar(df, x = 'month', y = 'A', facet_col='fiscal_year', facet_col_wrap=1)
fig.show()
【问题讨论】:
标签: python pandas plotly plotly-python