openpyxl3.0官方文檔(20)—— 更改繪圖區(qū)域和圖例布局

可以使用layout類實例的布局屬性設(shè)置圖表的布局。

圖表布局?

尺寸和位置?

圖表可以放在其容器中。xy調(diào)整位置,wh調(diào)整大小,單位是容器的比例。圖表不能放在容器外,寬度和高度是主要約束條件:如果x+w>1,則x=1-w。
x是從左邊開始的水平位置
y是從頂部開始的垂直位置
h是圖表相對于其容器的高度
w是盒子的寬度

模式?

除了大小和位置,相關(guān)屬性的模式還可以設(shè)置為factoredge,默認(rèn)為factor

    layout.xMode = edge
    

目標(biāo)?

layoutTarget可以設(shè)置為outerinner。默認(rèn)值為outer

    layout.layoutTarget = inner
    

圖例布局?

圖例的位置可以通過設(shè)置其位置來控制:右、左、上、下和右上分別為rl、t、btr。默認(rèn)值為r。

    legend.position = 'tr'
    

或使用手動布局:

    legend.layout = ManualLayout()
    
    from openpyxl import Workbook, load_workbook
    from openpyxl.chart import ScatterChart, Series, Reference
    from openpyxl.chart.layout import Layout, ManualLayout
    
    wb = Workbook()
    ws = wb.active
    
    rows = [
        ['Size', 'Batch 1', 'Batch 2'],
        [2, 40, 30],
        [3, 40, 25],
        [4, 50, 30],
        [5, 30, 25],
        [6, 25, 35],
        [7, 20, 40],
    ]
    
    for row in rows:
        ws.append(row)
    
    ch1 = ScatterChart()
    xvalues = Reference(ws, min_col=1, min_row=2, max_row=7)
    for i in range(2, 4):
        values = Reference(ws, min_col=i, min_row=1, max_row=7)
        series = Series(values, xvalues, title_from_data=True)
        ch1.series.append(series)
    
    
    ch1.title = "Default layout"
    ch1.style = 13
    ch1.x_axis.title = 'Size'
    ch1.y_axis.title = 'Percentage'
    ch1.legend.position = 'r'
    
    ws.add_chart(ch1, "B10")
    
    from copy import deepcopy
    
    # Half-size chart, bottom right
    ch2 = deepcopy(ch1)
    ch2.title = "Manual chart layout"
    ch2.legend.position = "tr"
    ch2.layout=Layout(
        manualLayout=ManualLayout(
            x=0.25, y=0.25,
            h=0.5, w=0.5,
        )
    )
    ws.add_chart(ch2, "H10")
    
    # Half-size chart, centred
    ch3 = deepcopy(ch1)
    ch3.layout = Layout(
        ManualLayout(
        x=0.25, y=0.25,
        h=0.5, w=0.5,
        xMode="edge",
        yMode="edge",
        )
    )
    ch3.title = "Manual chart layout, edge mode"
    ws.add_chart(ch3, "B27")
    
    # Manually position the legend bottom left
    ch4 = deepcopy(ch1)
    ch4.title = "Manual legend layout"
    ch4.legend.layout = Layout(
        manualLayout=ManualLayout(
            yMode='edge',
            xMode='edge',
            x=0, y=0.9,
            h=0.1, w=0.5
        )
    )
    
    ws.add_chart(ch4, "H27")
    
    wb.save("chart_layout.xlsx")
    

這將生成四個圖表。
在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容