如何使用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
相关产品推荐
相关产品推荐

