Plotly柱状图调整x轴月份顺序从一月起始的实现问题
解决方案
你遇到的问题根源有两个,对应调整即可解决:
- 你生成的日期是从当前日期往前倒推的,提取的唯一年份列表默认从新到旧排列,直接遍历会导致年份轨迹倒序,先对年份列表做升序排序即可解决
- Plotly的分类坐标轴默认按照数据首次出现的顺序排列刻度,你的数据最早月份是9月,所以x轴默认从9月开始,手动指定x轴的刻度顺序为1-12月的完整顺序即可修正。
修改后的完整代码如下:
import datetime import pandas as pd import plotly.graph_objects as go import random df = pd.DataFrame({}) numdays = 1000 base = datetime.datetime.today() date_list = [base - datetime.timedelta(days=x) for x in range(numdays)] price = [random.randint(1,10) for i in range(numdays)] df['price'] = price df.index = date_list df = df.resample('MS').sum() df['month'] = df.index.month_name() df['month number'] = df.index.month df['year'] = df.index.year # 对年份列表做升序排序,解决年份倒序问题 year_list = df['year'].unique().tolist() year_list.sort() fig = go.Figure() for year in year_list: df_aux = df[df.year==year] df_aux = df_aux.sort_values(by=['month number']) fig.add_trace(go.Bar(x=df_aux.month, y=df_aux['price'], name=year)) # 手动设置x轴刻度顺序为1月到12月的完整顺序 fig.update_xaxes( categoryorder='array', categoryarray=['January','February','March','April','May','June','July','August','September','October','November','December'] ) fig.show()
运行后x轴会按照1月到12月的顺序排列,年份轨迹也为正序,即使某一年对应月份没有数据,也会保留对应月份的空缺位置,符合展示需求。
内容的提问来源于stack exchange,提问作者dc2
相关产品推荐
相关产品推荐

