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

Matplotlib条形图颜色设置问题:指定区间条形未变蓝全为绿色

问题分析与解决方案

你的问题核心在于pandas的plot方法在处理单系列条形图时,部分旧版本可能无法正确解析颜色列表参数,导致所有条形都使用了默认的绿色(或者列表中的统一颜色)。下面是两种可行的解决办法:

方法1:改用Matplotlib原生bar函数(推荐)

直接使用Matplotlib的bar函数可以更精确地控制每个条形的颜色,避免pandas封装层的限制。修正后的代码如下:

import matplotlib.pyplot as plt
import pandas as pd

# 替换已弃用的from_items方法,用字典构造DataFrame更稳妥
sales = [('Jan', [150, 200, 50,150, 200, 50,150, 200, 50, 150, 200, 50,150, 200, 50,150, 200, 50,150, 200, 50,150, 200, 50])]
df = pd.DataFrame(dict(sales))

# 生成颜色列表:索引19-22对应蓝色,其余为绿色
colors = ['blue' if i in range(19, 23) else 'green' for i in range(len(df))]

plt.figure(figsize=(16,8))
# 直接用matplotlib绘制条形图,指定每个条形的颜色
bars = plt.bar(df.index, df['Jan'], color=colors, edgecolor='none', linewidth=2)

# 配置图表样式
plt.legend([bars], ['Jan'], prop={'size':16})
ax = plt.gca()
plt.gcf().autofmt_xdate()
ax.set_xticklabels(df.index)
plt.tight_layout()

plt.savefig('myimage.svg', format='svg', dpi=1200)
plt.show()

方法2:升级Pandas版本

如果你的Pandas版本较旧(比如低于1.0.0),df.plot的color参数对单系列条形图的颜色列表支持不完善。升级到最新稳定版后,你原来的代码大概率能正常工作,同时记得替换弃用的方法:

import matplotlib.pyplot as plt
import pandas as pd

sales = [('Jan', [150, 200, 50,150, 200, 50,150, 200, 50, 150, 200, 50,150, 200, 50,150, 200, 50,150, 200, 50,150, 200, 50])]
df = pd.DataFrame(dict(sales))  # 替换from_items

# 调整条件为更直观的写法,明确包含索引22
colors = ['blue' if (i>=19 and i<=22) else 'green' for i in range(len(df))]
df.plot(y='Jan', kind='bar', edgecolor='none', figsize=(16,8), linewidth=2, color=colors)

plt.legend(prop={'size':16})
ax = plt.gca()
plt.gcf().autofmt_xdate()
ax.set_xticklabels(df.index)
plt.tight_layout()
plt.savefig('myimage.svg', format='svg', dpi=1200)
plt.show()

关键细节说明

  • 我把i<23改成了i<=22,和range(19,23)逻辑等价,让条件更直观(明确包含索引22)。
  • pd.DataFrame.from_items已被Pandas官方弃用,改用pd.DataFrame(dict(sales))能避免版本兼容问题。
  • 使用Matplotlib原生函数能绕过Pandas封装层的限制,对图形样式的控制更直接可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:01:23