如何自定义Plotly箱线图的图例排序顺序,支持重命名为月份名称?
Plotly箱线图图例顺序调整与月份重命名方案
问题根源:Plotly默认会将字符串类型的月份字段按字典序排序,导致出现1、10、11、12、2这类乱序,仅需指定分类顺序即可解决,无需大幅修改原有绘图代码。
方案1:仅调整图例为1-12的数字顺序
在调用绘图函数前,先将数据中的月份列转为有序分类类型:
import pandas as pd # 替换下方`month`为你实际的月份列名 data['month'] = pd.Categorical( data['month'], categories=[str(i) for i in range(1, 13)], ordered=True )
处理完成后再调用make_box_plot函数绘图即可,图例和X轴刻度都会自动遵循1到12的顺序排列。
方案2:同时将图例重命名为Jan-Dec月份缩写
先对数据做预处理,完成映射和有序分类设置:
import pandas as pd # 月份映射字典 month_mapping = { '1': 'Jan', '2': 'Feb', '3': 'Mar', '4': 'Apr', '5': 'May', '6': 'Jun', '7': 'Jul', '8': 'Aug', '9': 'Sep', '10': 'Oct', '11': 'Nov', '12': 'Dec' } # 替换下方`month`为你实际的月份列名 # 第一步:将数字月份映射为月份缩写 data['month'] = data['month'].map(month_mapping) # 第二步:设置为有序分类,保证顺序正确 data['month'] = pd.Categorical( data['month'], categories=list(month_mapping.values()), ordered=True )
处理完成后调用原有绘图函数即可,图例和X轴会自动按Jan到Dec的顺序展示。
可选:不修改原始数据的调整方法
如果你不想改动原始数据集,可以直接在绘图函数内部更新图例配置,在fig.update_layout代码段前添加如下内容:
# 按1-12顺序定义新的图例名称 new_names = {str(i): month for i, month in enumerate( ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], 1 )} # 逐个更新图例名称 for trace in fig.data: trace.name = new_names[trace.name] # 调整图例排列顺序为正常顺序,替换原有的grouped配置 fig.update_layout(legend={'traceorder': 'normal'})
该方法会直接修改生成的图表对象,不会影响原始数据。
内容的提问来源于stack exchange,提问作者David L.E
相关产品推荐
相关产品推荐

