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

Matplotlib 2.1.0:如何为所有柱状图应用虚线边框样式?

解决Matplotlib 2.1.0中柱状图仅第一个柱子生效虚线边框的问题

嘿,这个坑我之前踩过!在Matplotlib 2.1.0这个旧版本里,直接给ax.bar()传递ls='--'、ec='r'这类边框样式参数,确实会出现只有第一个柱子生效的bug。别担心,下面两种方法可以轻松解决:

方法1:遍历每个柱子补丁设置样式

ax.bar()会返回一个包含所有柱子补丁(patches)的BarContainer对象,我们可以遍历这个对象里的每个柱子,单独设置边框样式:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 1)
# 先绘制柱状图,保存返回的柱子容器
bars = ax.bar([1, 2, 3, 4], [10, 20, 15, 13])

# 遍历每个柱子,逐一设置边框样式
for bar in bars:
    bar.set_linestyle('--')  # 设置虚线样式
    bar.set_edgecolor('r')   # 设置边框颜色为红色
    bar.set_linewidth(5)     # 设置边框宽度

plt.show()

方法2:通过参数列表批量设置(可选)

如果你不想写循环,也可以给edgecolor、linestyle等参数传入对应长度的列表(和柱子数量一致),不过这个方法在部分旧版本里兼容性不如第一种稳妥:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 1)
# 给每个柱子传入相同的边框参数
ax.bar(
    [1, 2, 3, 4], 
    [10, 20, 15, 13], 
    ls=['--']*4, 
    ec=['r']*4, 
    lw=[5]*4
)

plt.show()

为什么会出现这个问题?

在Matplotlib 2.1.0版本中,bar()方法的边框样式参数存在一个小bug:当传递单一值而非列表时,这些样式只会被应用到第一个柱子上,后续柱子无法正确继承。而通过直接操作每个柱子的补丁对象,就能绕过这个参数传递的问题,确保所有柱子都能应用上你想要的样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:49:50