from openpyxl import *
from openpyxl.chart import *
wb = load_workbook("videogamesales.xlsx")
ws = wb["Breakdown of Sales by Year"]
chart = LineChart()
chart.title = "Total Sales"
chart.x_axis.title = "Year"
chart.y_axis.title = "Breakdown of Sales by Year"
value = Reference(ws, min_col=2, max_col=5, min_row=1, max_row=40)
cats = Reference(ws, min_col=1, min_row=2, max_row=40)
chart.x_axis.delete = False
chart.y_axis.delete = False
chart.add_data(data=value, titles_from_data=True)
chart.set_categories(cats)
chart.style = 10
chart.width = 20
chart.height = 10
chart.legend.overlay = False
ws.add_chart(chart, "H2")
wb.save("videogamesales.xlsx")
该教程告诉我,我可以在不更改特殊属性的情况下制作清晰的图表。
但这没有用。
我使用 'chart.legend.overlay = False' 解决了图例与图形区域重叠的问题
但是我找不到 x_axis、y_axis 和 title 的方法。
请帮助我。
我想要一个清晰的图形 我想要的图形图像
可以使用
layout
参数微调图表以避免 OpenPyxl 图表中的重叠。以下是如何操作:
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
from openpyxl.chart.layout import Layout, ManualLayout
wb = load_workbook("videogamesales.xlsx")
ws = wb["Breakdown of Sales by Year"]
chart = LineChart()
chart.title = "Total Sales"
chart.x_axis.title = "Year"
chart.y_axis.title = "Breakdown of Sales by Year"
# 数据和类别
value = Reference(ws, min_col=2, max_col=5, min_row=1, max_row=40)
cats = Reference(ws, min_col=1, min_row=2, max_row=40)
chart.add_data(data=value, titles_from_data=True)
chart.set_categories(cats)
# --- 微调布局以避免重叠 ---
chart.layout = Layout(
manualLayout=ManualLayout(
x=0.1, # 从单元格左上角开始的 x 位置
y=0.1, # 从单元格左上角开始的 y 位置
h=0.8, # 图表高度(单元格高度的百分比)
w=0.8, # 图表宽度(单元格宽度的百分比)
)
)
# 图例位置
chart.legend.overlay = False
# 其他样式设置
chart.style = 10
chart.width = 20
chart.height = 10
ws.add_chart(chart, "H2")
wb.save("videogamesales.xlsx")
在此代码中:
-
我们导入必要的类,包括
Layout
和ManualLayout
。 -
我们使用
ManualLayout
创建一个Layout
对象,以精确控制图表在单元格内的位置和大小。 -
x
和y
控制图表相对于单元格左上角的偏移。 -
h
和w
设置图表的高度和宽度,作为单元格高度和宽度的百分比。调整这些值以获得最佳间距。
通过调整这些布局参数,可以创建标题、轴和图例不再重叠的清晰、专业的图表。
标签:python,openpyxl From: 78787006