运营的 Python 指南 - Python Excel 绘制柱形图

本贴最后更新于 1859 天前,其中的信息可能已经时移世改

这是一份写给运营人员的 Python 指南。本文主要讲述如何使用 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 绘制柱形图》得知,我们主要使用 BarChartBarChart3D 类。
图表中许多的细节由 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)

运行结果示例图片

pyopexcelbarchart4.png

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    545 引用 • 672 回帖
  • Excel
    30 引用 • 28 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...