Python Excel 绘制柱形图
本文主要讲述如何使用python操作excel绘制柱形图。
相关代码请参考 https://github.com/rustfisher/python-playground
本文链接:https://www.rustfisher.com/2019/11/19/python/python-op-excel_openpyxl_bar_column_chart/
开发工具,环境
- pycharm
- python3
- office excel
前面我们已经创建好了一张excel表。
现在我们要根据已有的数据,往里面添加柱形图。
柱形图 barchart
参考《python openpyxl excel绘制柱形图》得知,我们主要使用barchart
与barchart3d
类。
图表中许多的细节由barchart属性控制。
后文都以chart1来表示柱形图对象 chart1 = barchart()
。
数据来源范围 reference
首先我们应该确定数据的范围。有数据才好绘图。这里使用的是reference
类来表示数据“引用”范围。
data1 = reference(st, min_col=2, min_row=1, max_row=7, max_col=3) cats1 = reference(st, min_col=1, min_row=2, max_row=7)
需要注意的是,范围的下标是从1开始的。
这里的data1把标题也框进去了。设定数据的时候,需要设置titles_from_data=true
chart1.add_data(data1, titles_from_data=true)
设置种类使用set_categories
方法,也是把一个范围(reference)的数据传入。
chart1.set_categories(cats1)
柱子方向控制 type
方向由属性type
来控制,有2个可选参数:bar
表示横向,col
表示竖直。
chart1.type = "bar" # 横向柱形图 chart1.type = "col" # 纵向柱形图
标题 title
属性title控制标题。如果置为none则不显示标题。
图表的标题 chart1.title = "日均值对比"
坐标的标题,首先需要拿到x,y的坐标。
chart1.y_axis.title = '数值' chart1.x_axis.title = st.cell(column=1, row=1).value # 直接用单元格的内容做标题
添加图表
add_chart将图表添加到sheet中。图表的左上角对齐某个单元格。下面是对齐a8。
st.add_chart(chart1, 'a8')
3d柱形图 barchart3d
柱子的形状 shape
默认是立方体,但也可以从下面的形状里选一个。
{'box', 'pyramid', 'pyramidtomax', 'conetomax', 'cone', 'cylinder'}
chart1.type = 'cone'
box 是立方体,中规中矩。
pyramid 是金字塔,顶部也是尖的。
cone 是圆锥,看起来很尖锐。
cylinder 是圆柱。
配色风格 style
style 会影响图表的配色风格,一般用10比较多彩多样。
代码示例
绘制图表用的数据来自运营的python指南 - python 操作excel。
我们在已有的表格中添加柱形图。代码参考python-playground - github
绘制2d柱形图
def create_bar_chart_1(file_path): """ 插入柱形图 :param file_path: excel 文件路径 :return: none """ wb = load_workbook(file_path) st = wb.active data1 = reference(st, min_col=2, min_row=1, max_row=7, max_col=3) cats1 = reference(st, min_col=1, min_row=2, max_row=7) chart1 = barchart() chart1.type = "col" chart1.style = 9 chart1.title = "日均值对比" # chart1.y_axis.title = '数值' chart1.x_axis.title = st.cell(column=1, row=1).value chart1.add_data(data1, titles_from_data=true) chart1.set_categories(cats1) chart1.shape = 0 st.add_chart(chart1, 'a8') wb.save(file_path)
绘制3d柱形图
def create_bar_chart_2(file_path): """ 插入3d柱形图 :param file_path: excel 文件路径 :return: none """ wb = load_workbook(file_path) st = wb.active data1 = reference(st, min_col=2, min_row=1, max_row=7, max_col=3) cats1 = reference(st, min_col=1, min_row=2, max_row=7) chart1 = barchart3d() chart1.type = "bar" chart1.style = 10 chart1.title = "日均值对比" chart1.x_axis.title = none chart1.shape = 'cylinder' chart1.add_data(data1, titles_from_data=true) chart1.set_categories(cats1) st.add_chart(chart1, 'a26') wb.save(file_path)
运行结果示例图片
上一篇: 2019年PHP最新面试题(含答案)
下一篇: 古代是没有电的 古人难不成一天黑就睡觉吗