Python中,使用openpyxl创建柱形图

如图,下面的柱形图就是基于上面的图表生成的

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('生成了柱形图!')


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容