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

Matplotlib柱状图为何自动按X轴排序?如何按Y值排序?

问题分析与解决

你的代码有两个关键错误,导致柱状图无法按Y值正确排序显示:

  1. 柱状图x轴位置错误:你用df.index作为plt.bar的x轴参数,但排序后的DataFrame保留了原始数据的索引(比如排序后第一条数据的索引是1,对应原数组中id=7的位置),这会让柱子的位置分散在原索引的位置上,而非按排序后的顺序连续排列。
  2. x轴标签设置错误:plt.xticks的第二个参数你传了df["values"],这会把数值当成x轴标签,而你实际需要显示的是对应的ids。

修正后的代码方案

方案一:使用Matplotlib原生方法

手动设置连续的x轴位置,并绑定正确的ids标签:

import pandas as pd
import matplotlib.pyplot as plt

ids = [1,7,5]
values = [3.0, 9000.0, 2.7]

df = pd.DataFrame(
    {
        "ids": ids,
        "values" : values
    }
)

# 按values降序排序
df_sorted = df.sort_values("values", ascending=False)

# 用连续的整数作为x轴位置
x_pos = range(len(df_sorted))
plt.bar(x_pos, df_sorted["values"], color='skyblue', edgecolor='black')
# 设置x轴刻度位置和对应的ids标签
plt.xticks(x_pos, df_sorted["ids"])

# 其他美化设置
plt.title("按数值排序的柱状图")
plt.ylabel("数值")
plt.xlabel("ID")
plt.show()

方案二:使用Pandas内置绘图(更简洁)

Pandas的plot.bar会自动处理排序后的DataFrame索引,直接生成正确顺序的柱状图:

import pandas as pd
import matplotlib.pyplot as plt

ids = [1,7,5]
values = [3.0, 9000.0, 2.7]

df = pd.DataFrame(
    {
        "ids": ids,
        "values" : values
    }
)

# 按values降序排序后直接绘图,x轴用ids
df_sorted = df.sort_values("values", ascending=False)
df_sorted.plot.bar(x="ids", y="values", color='skyblue', edgecolor='black')

plt.title("按数值排序的柱状图")
plt.ylabel("数值")
plt.xlabel("ID")
plt.show()

这两种方案都能实现你要的效果:数值最大的id7作为第一个柱子,数值最小的id5作为最后一个柱子,同时x轴显示对应的ID标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:15:01