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

如何使用xlxswriter为图表正负条形设置条件格式?

用XlsxWriter实现图表正负条形分色

可以通过XlsxWriter实现这个需求,有两种常用方法,具体如下:

方法一:单系列逐个设置数据点颜色

这种方法直接遍历数据,给每个正负数据点单独指定条形颜色,无需修改原始数据结构:

import xlsxwriter

# 创建Excel文件和工作表
workbook = xlsxwriter.Workbook('bar_chart_single_series.xlsx')
worksheet = workbook.add_worksheet()

# 示例数据
data = [10, -5, 15, -20, 8, -3]
categories = ['A', 'B', 'C', 'D', 'E', 'F']

# 写入数据到工作表
worksheet.write_column('A1', categories)
worksheet.write_column('B1', data)

# 创建条形图
chart = workbook.add_chart({'type': 'bar'})

# 添加基础数据系列
chart.add_series({
    'categories': '=Sheet1!$A$1:$A$6',
    'values': '=Sheet1!$B$1:$B$6',
})

# 遍历数据,为正负条形设置不同颜色
for index, value in enumerate(data):
    if value < 0:
        # 负数条形设为红色
        chart.set_series_point(index, {'fill': {'color': '#FF0000'}})
    else:
        # 正数条形设为绿色
        chart.set_series_point(index, {'fill': {'color': '#00B050'}})

# 配置图表样式
chart.set_title({'name': '正负条形分色(单系列)'})
chart.set_x_axis({'name': '数值'})
chart.set_y_axis({'name': '类别'})

# 插入图表到工作表
worksheet.insert_chart('D1', chart)

# 关闭文件
workbook.close()

方法二:拆分正负数据为双系列

如果数据量较大,拆分数据为两个系列(正数、负数)分别设置颜色,性能更优:

import xlsxwriter

workbook = xlsxwriter.Workbook('bar_chart_two_series.xlsx')
worksheet = workbook.add_worksheet()

data = [10, -5, 15, -20, 8, -3]
categories = ['A', 'B', 'C', 'D', 'E', 'F']

# 拆分正负数据,负数取绝对值(用于双系列反向显示)
positive_data = [max(val, 0) for val in data]
negative_data = [abs(min(val, 0)) for val in data]

# 写入拆分后的数据
worksheet.write_column('A1', categories)
worksheet.write_column('B1', positive_data)
worksheet.write_column('C1', negative_data)

# 创建条形图
chart = workbook.add_chart({'type': 'bar'})

# 添加正数系列,设置绿色填充
chart.add_series({
    'name': '正数',
    'categories': '=Sheet1!$A$1:$A$6',
    'values': '=Sheet1!$B$1:$B$6',
    'fill': {'color': '#00B050'},
})

# 添加负数系列,设置红色填充并启用Y2轴实现反向显示
chart.add_series({
    'name': '负数',
    'categories': '=Sheet1!$A$1:$A$6',
    'values': '=Sheet1!$C$1:$C$6',
    'fill': {'color': '#FF0000'},
    'y2_axis': True,
})

# 隐藏Y2轴,避免重复显示坐标轴
chart.set_y2_axis({'visible': False})

# 配置图表样式
chart.set_title({'name': '正负条形分色(双系列)'})
chart.set_x_axis({'name': '数值'})
chart.set_y_axis({'name': '类别'})

worksheet.insert_chart('D1', chart)
workbook.close()

两种方法说明

  • 单系列方法:适合小数据集,操作直观,无需修改原始数据
  • 双系列方法:适合大数据集,渲染效率更高,条形显示更规整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:48:15