可以使用layout類實例的布局屬性設(shè)置圖表的布局。
圖表布局?
尺寸和位置?
圖表可以放在其容器中。x和y調(diào)整位置,w和h調(diào)整大小,單位是容器的比例。圖表不能放在容器外,寬度和高度是主要約束條件:如果x+w>1,則x=1-w。
x是從左邊開始的水平位置
y是從頂部開始的垂直位置
h是圖表相對于其容器的高度
w是盒子的寬度
模式?
除了大小和位置,相關(guān)屬性的模式還可以設(shè)置為factor或edge,默認(rèn)為factor:
layout.xMode = edge
目標(biāo)?
layoutTarget可以設(shè)置為outer或inner。默認(rèn)值為outer:
layout.layoutTarget = inner
圖例布局?
圖例的位置可以通過設(shè)置其位置來控制:右、左、上、下和右上分別為r、l、t、b和tr。默認(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")
這將生成四個圖表。在這里插入圖片描述