You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib 2.1.2搭配pandas如何设置x轴自定义顺序避免按字母排序

问题原因

matplotlib 2.1.2版本中,直接向plt.plot()传入字符串类型的x轴序列时,会默认对字符串执行字典序排序后再映射坐标轴位置,因此即便你的DataFrame已经提前按数值排好顺序,传入字符串标签作为x参数时依然会被打乱顺序。你添加数字前缀后依然排序错误,是因为字符串的字典序规则下"10"会排在"2"前面,和数值排序逻辑不一致。

解决方法

核心思路是先使用位置索引作为x坐标绘制图形,再手动替换x轴刻度标签,完全绕开matplotlib的自动排序逻辑:

  1. 基础测试用例调整代码:
# 原有排序逻辑保持不变
df1 = pd.DataFrame({'Col1': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'],
        'Col2': [0, 1, -1, 4, 2, 3, -2 , -3, 5, -5, 6, 7]
        })
df1.sort_values('Col2', inplace=True)
df1.reset_index(drop=True, inplace=True)

# 调整绘图逻辑
plt.plot(range(len(df1)), df1.Col2)
# 手动设置x轴刻度标签为df1中Col1的顺序
plt.xticks(range(len(df1)), df1.Col1)
  1. WoE绘图函数调整版本:
# 编写基于WoE绘图的函数
def plot_by_woe(df_WoE, rotation_of_x_axis_labels=0):
    # 直接用位置索引作为x坐标,避免字符串自动排序
    x = np.arange(len(df_WoE))
    x_labels = np.array(df_WoE.iloc[:, 0].apply(str))
    y = df_WoE['WoE']
    plt.figure(figsize= (18,6))
    plt.plot(x, y, marker='o', linestyle = '--', color = 'k')
    # 手动替换x轴刻度标签
    plt.xticks(x, x_labels, rotation = rotation_of_x_axis_labels)
    plt.xlabel(df_WoE.columns[0])
    plt.ylabel('WoE')
    plt.title(str('WoE by ' + df_WoE.columns[0]))

该方案完全兼容matplotlib 2.1.2版本,无需升级依赖,x轴顺序会和传入的DataFrame行顺序完全一致。

内容的提问来源于stack exchange,提问作者BuJay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:39:03