如何调整Pyplot中分类变量(up/mid/down)的显示顺序
嘿,这个问题我太熟了!在Matplotlib里调整分类变量的显示顺序其实没那么复杂,主要分两种场景来处理,看你是直接用Matplotlib原生绘图,还是结合Pandas来管理数据:
方法1:直接给Matplotlib坐标轴指定顺序
如果是直接用Matplotlib的bar、boxplot等函数绘图,你可以在绘图后手动指定x轴刻度的标签顺序:
import matplotlib.pyplot as plt # 示例数据:分类和对应的速度值 categories = ['up', 'mid', 'down'] speed_data = [14, 21, 16] # 先绘制基础图形 plt.bar(categories, speed_data) # 强制设置你想要的顺序——比如这里改成down-mid-up plt.xticks(ticks=[0, 1, 2], labels=['down', 'mid', 'up']) plt.xlabel('Category') plt.ylabel('Speed') plt.show()
要是你想要up-mid-down的顺序,只需要把labels参数改成['up', 'mid', 'down']就行,非常直接。
方法2:用Pandas有序分类从根源控制(推荐)
如果你的数据存在Pandas的DataFrame/Series里,更优雅的方式是把分类列转换成有序分类类型,这样不管是用Pandas自带的绘图函数,还是Seaborn,都会自动遵循你指定的顺序:
import pandas as pd import matplotlib.pyplot as plt # 构造示例数据集 df = pd.DataFrame({ 'category': ['up', 'mid', 'down', 'up', 'mid', 'down'], 'speed': [12, 23, 15, 13, 21, 17] }) # 将category列转为有序分类,指定目标顺序(比如down-mid-up) df['category'] = pd.Categorical( df['category'], categories=['down', 'mid', 'up'], ordered=True ) # 分组求均值后绘图,顺序会自动匹配你设置的分类顺序 df.groupby('category')['speed'].mean().plot(kind='bar') plt.xlabel('Category') plt.ylabel('Average Speed') plt.show()
要是用Seaborn绘图,也可以直接在函数里加order参数快速指定顺序,比如:
import seaborn as sns sns.boxplot(x='category', y='speed', data=df, order=['down', 'mid', 'up'])
内容的提问来源于stack exchange,提问作者Jorre Goossens
相关产品推荐
相关产品推荐

