如何为PyWaffle图例设置自定义排序?求代码修改方案
PyWaffle 自定义图例排序的实现方法
方法一:提前调整数据源顺序(推荐)
PyWaffle的图例顺序和你传入的labels、values顺序完全对应,所以最直接的方式是先把DataFrame按自定义类别顺序重新排序,再传入参数。
假设你的自定义类别顺序是['类别X', '类别Y', '类别Z'],修改代码如下:
plt.rcParams["figure.figsize"] = [7, 7] plt.rcParams["figure.autolayout"] = True # 定义自定义类别顺序 custom_order = ['类别X', '类别Y', '类别Z'] # 按自定义顺序重新排序DataFrame df_sorted = df.set_index('category').loc[custom_order].reset_index() fig = plt.figure( FigureClass=Waffle, rows=10, values=df_sorted['values'], title={'label': 'Latest data, 2022', 'loc': 'center'}, labels=list(df_sorted.category), legend={'loc': 'lower center','bbox_to_anchor': (.5, -0.1),'ncol': len(df_sorted)}, starting_location='SE', block_arranging_style='snake', icons='person', icon_size=32, ) plt.show()
方法二:生成图表后修改图例顺序
如果不想改动数据源,可以在生成图表后,获取图例的手柄(handles)和标签(labels),按自定义顺序重新排序后再设置图例:
plt.rcParams["figure.figsize"] = [7, 7] plt.rcParams["figure.autolayout"] = True fig = plt.figure( FigureClass=Waffle, rows=10, values=df['values'], title={'label': 'Latest data, 2022', 'loc': 'center'}, labels=list(df.category), legend={'loc': 'lower center','bbox_to_anchor': (.5, -0.1),'ncol': len(df)}, starting_location='SE', block_arranging_style='snake', icons='person', icon_size=32, ) # 定义自定义类别顺序 custom_order = ['类别X', '类别Y', '类别Z'] # 获取当前图例的handles和labels current_handles, current_labels = fig.axes[0].get_legend_handles_labels() # 按自定义顺序排序handles和labels sorted_indices = [current_labels.index(cat) for cat in custom_order] sorted_handles = [current_handles[i] for i in sorted_indices] sorted_labels = [current_labels[i] for i in sorted_indices] # 重新设置图例 fig.axes[0].legend( handles=sorted_handles, labels=sorted_labels, loc='lower center', bbox_to_anchor=(.5, -0.1), ncol=len(df) ) plt.show()
注意:方法二中要确保自定义顺序里的类别名称和current_labels完全一致,否则会报错。
内容的提问来源于stack exchange,提问作者epidemiologistseekshelp
相关产品推荐
相关产品推荐

