
如图,下面的柱形图就是基于上面的图表生成的
CreateBarChart.py
import os
import sys
from openpyxl import load_workbook
from openpyxl import chart
from openpyxl.chart import BarChart, Reference
from openpyxl.chart.series import SeriesLabel
from openpyxl.drawing.text import ParagraphProperties, CharacterProperties
def set_chart_title_size(chart, size=1400):
'''设置chart的title的字号'''
paraprops = ParagraphProperties()
paraprops.defRPr = CharacterProperties(sz=size)
for para in chart.title.tx.rich.paragraphs:
para.pPr=paraprops
def get_cur_dir():
'''获取当前py文件所在目录'''
dirPath = os.path.dirname(sys.argv[0])
return dirPath
if __name__ == "__main__":
'''创建柱形图'''
wbPath = os.path.join(get_cur_dir(),'科室同疾病.xlsx')
wb = load_workbook(wbPath, data_only=False)
wsName = '测试'
ws = wb[wsName]
# 每个x的单位中有几类值,这几类值的名字、(柱子的)颜色分别是什么
SeriesCnt = 2
SeriesTitles = ['均次费用 2024年','均次费用 2025年']
SeriesColors = ['5B9BD5','ED7D31']
# 3、4是本组的category(x轴标签),5、6是具体数据
categories = Reference(ws, min_col=3, max_col=4, min_row=4, max_row=11)
values = Reference(ws , min_col=5, max_col =6, min_row=4, max_row=11)
# 创建柱形图
curChart = BarChart()
# 设置标题:内容、字号
curChart.title = '柱形图名称'
set_chart_title_size(curChart, size=1500)
# 图的左上角从哪个单元格开始
beginRow = 15
curChart.anchor = f'A{beginRow}'
# 柱形图高度
curChart.height = 10
# 柱形图宽度
curChart.width = 20
# 每个x的单位中的几类值(柱子)之间的重叠程度(负数表示不重叠且有间隔)
curChart.overlap = -20
# 一行对应一组(Category)数据
curChart.add_data(values, from_rows=False)
curChart.set_categories(categories)
# series(各类柱子)的说明显示在上下左右哪个位置:'b', 'tr'(右上 top right), 'l', 'r', 't'
curChart.legend.position = 'b'
# 防止标签和柱形图本体(柱子下方的说明)重叠
curChart.legend.overlay = False
# 设置各series说明的内容和各series的颜色
for i in range(SeriesCnt):
curChart.series[i].title =SeriesLabel(v=SeriesTitles[i])
curChart.series[i].graphicalProperties.solidFill = SeriesColors[i]
# 每个柱子上方显示且只显示数值
curChart.dLbls=chart.label.DataLabelList()
curChart.dLbls.showSerName = False
curChart.dLbls.showCatName = False
curChart.dLbls.showLegendKey = False
curChart.dLbls.showVal = True
# 显示x、y轴的刻度
curChart.x_axis.delete = False
curChart.y_axis.delete = False
# 把画好的柱形图设置到sheet中:
ws.add_chart(curChart)
# 保存
wb.save(wbPath)
wb.close()
print('生成了柱形图!')