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

为什么DataFrame绘制柱状图刻度合并,行绘制正常且如何自定义柱子颜色

直接绘制整个DataFrame出现异常的原因

  • 双图问题:你手动调用plt.subplots()创建了画布和轴对象,但调用df.plot()时没有传入ax=ax参数指定绘图轴,pandas会自动创建新的画布和轴进行绘图,因此会出现两个图表,手动创建的那个没有绘图内容,显示为空。
  • 柱子集中在同一刻度问题:DataFrame的柱状图默认逻辑是行作为X轴的分组维度,列作为同分组下的不同系列。你的DataFrame只有1行,所以X轴只有1个分组刻度,所有列的柱子都会集中在这一个刻度下,和你要的「每个列对应一个X轴刻度」的需求不符。

实现需求的两种方案

方案1:基于单行Series绘图,传入颜色列表

Series.plot的color参数支持传入和柱子数量等长的颜色列表,遍历索引生成对应颜色即可实现单独修改Total柱子的颜色:

import pandas as pd
import matplotlib.pyplot as plt

data = {"Small-Mid":367, "Large":0, "XXL":0, "FF":328, "AA":0, "Total":695} 
df = pd.DataFrame([data], columns=data.keys()) 

fig, ax = plt.subplots(figsize=(11.96, 4.42))
row = df.iloc[0]
# 生成颜色列表:非Total列用默认蓝色,Total列可自定义为其他颜色
colors = ['#1f77b4' if col != 'Total' else '#ff7f0e' for col in row.index]
row.plot(kind='bar', color=colors, ax=ax)
plt.show()

方案2:转置DataFrame后绘图

如果你要基于DataFrame绘图,可以先把DataFrame转置,让列名变成索引,每一行对应原来的一列数据,绘图时X轴就会自动对应每个类别:

import pandas as pd
import matplotlib.pyplot as plt

data = {"Small-Mid":367, "Large":0, "XXL":0, "FF":328, "AA":0, "Total":695} 
df = pd.DataFrame([data], columns=data.keys()) 

fig, ax = plt.subplots(figsize=(11.96, 4.42))
colors = ['#1f77b4' if col != 'Total' else '#ff7f0e' for col in df.columns]
# 转置后绘图,关闭不需要的图例
df.T.plot(kind='bar', color=colors, ax=ax, legend=False)
plt.show()

两种方案都可以正常显示图表,且单独修改Total柱子的颜色,可根据使用习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:57:03