Python openpyxl Excel繪制柱形圖


這是一份openpyxl的使用指南。

大體內容翻譯自官網 https://openpyxl.readthedocs.io/en/stable/charts/bar.html#vertical-horizontal-and-stacked-bar-charts

本文在官網基礎上會有一些改動。代碼請參考 https://github.com/RustFisher/python-playground

本文鏈接 https://rustfisher.com/2019/11/14/Python/Python-openpyxl_charts_Bar_and_Column/

柱形圖

數據會被繪制成垂直,水平或者是層疊效果的柱形圖。

注意:

  • 接下來的設置會影響到不同類型的圖表。
  • 設置類別可以控制柱形圖是垂直或是水平。
  • 使用層疊圖形時,需要設置overlap成100。
  • 如果柱形是水平的,x和y坐標會對調過來。

2D圖表

2D圖表參考效果圖 - 原文圖片

示例代碼如下,根據給定的數據繪制了4張圖表。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Series, Reference


def bar_chart_demo():
    wb = Workbook(write_only=True)
    ws = wb.create_sheet()

    rows = [
        ('Number', 'Batch 1', 'Batch 2'),
        (2, 10, 30),
        (3, 40, 60),
        (4, 50, 70),
        (5, 20, 10),
        (6, 10, 40),
        (7, 50, 30),
    ]

    for row in rows:
        ws.append(row)

    chart1 = BarChart()
    chart1.type = "col"
    chart1.style = 10
    chart1.title = "Bar Chart"
    chart1.y_axis.title = 'Test number'
    chart1.x_axis.title = 'Sample length (mm)'

    data = Reference(ws, min_col=2, min_row=1, max_row=7, max_col=3)
    cats = Reference(ws, min_col=1, min_row=2, max_row=7)
    chart1.add_data(data, titles_from_data=True)
    chart1.set_categories(cats)
    chart1.shape = 4
    ws.add_chart(chart1, "A10")

    from copy import deepcopy

    chart2 = deepcopy(chart1)
    chart2.style = 11
    chart2.type = "bar"
    chart2.title = "Horizontal Bar Chart"

    ws.add_chart(chart2, "I10")

    chart3 = deepcopy(chart1)
    chart3.type = "col"
    chart3.style = 12
    chart3.grouping = "stacked"
    chart3.overlap = 100
    chart3.title = 'Stacked Chart'

    ws.add_chart(chart3, "A27")

    chart4 = deepcopy(chart1)
    chart4.type = "bar"
    chart4.style = 13
    chart4.grouping = "percentStacked"
    chart4.overlap = 100
    chart4.title = 'Percent Stacked Chart'

    ws.add_chart(chart4, "I27")

    wb.save("out/bar.xlsx")


if __name__ == '__main__':
    bar_chart_demo()

譯者注:這里調整了圖表在excel中的位置,原文是在G列,即G10G27,這里改為了I列。代碼格式也有微調。

我們需要生成圖表的時候,Excel會要我們先選定數據范圍(來源)。在代碼中用Reference來指定數據來源范圍。

3D圖表

繪制3D圖表,使用BarChart3D

def bar_3d():
    wb = Workbook()
    ws = wb.active

    rows = [
        (None, 2013, 2014),
        ("Apples", 5, 4),
        ("Oranges", 6, 2),
        ("Pears", 8, 3)
    ]

    for row in rows:
        ws.append(row)

    data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=4)
    titles = Reference(ws, min_col=1, min_row=2, max_row=4)
    chart = BarChart3D()
    chart.title = "3D Bar Chart"
    chart.add_data(data=data, titles_from_data=True)
    chart.set_categories(titles)

    ws.add_chart(chart, "E5")
    wb.save("out/bar3d.xlsx")

創建好的圖表用WPS打開發現是2D的。用Office Excel打開是3D的。

3D圖表效果圖 - 原文圖片


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM