You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

openpyxl图表:x轴、y轴及标题与图表区域重叠问题求助

问题

使用openpyxl生成折线图时,未修改特殊属性却出现图表标题、X轴、Y轴与图表区域重叠的问题。已通过chart.legend.overlay = False解决图例重叠,但找不到解决轴与标题重叠的方法。

当前图表效果:图表标题覆盖在绘图区域上方,Y轴标题与Y轴刻度标签重叠,X轴标题也和X轴刻度挤在一起。
期望图表效果:标题、轴标签与绘图区域之间留有足够空隙,布局整洁,各元素互不遮挡。

代码如下:

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")
解决方案

可以通过调整图表的绘图区域位置、标题及轴标签的偏移量来解决重叠问题,以下是修改后的代码:

from openpyxl import *
from openpyxl.chart import *
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.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

# 调整绘图区域位置,留出顶部、底部、左侧空间给标题和轴标签
chart.plot_area.layout = Layout(
    manualLayout=ManualLayout(
        x=0.12,  # 绘图区域左侧偏移(占图表宽度比例)
        y=0.15,  # 绘图区域顶部偏移(占图表高度比例)
        width=0.75,  # 绘图区域宽度(占图表宽度比例)
        height=0.7  # 绘图区域高度(占图表高度比例)
    )
)

# 调整Y轴标题的旋转角度和偏移,避免与刻度重叠
chart.y_axis.title.textProperties.rotation = 0  # 取消Y轴标题垂直旋转
chart.y_axis.title.alignment.horizontal = "right"  # Y轴标题右对齐
chart.y_axis.layout = Layout(
    manualLayout=ManualLayout(
        x=-0.1  # Y轴标题向左偏移
    )
)

# 调整X轴标题的偏移,避免与刻度重叠
chart.x_axis.layout = Layout(
    manualLayout=ManualLayout(
        y=0.1  # X轴标题向下偏移
    )
)

ws.add_chart(chart, "H2")

wb.save("videogamesales.xlsx")

关键调整说明:

  • 通过ManualLayout设置绘图区域的位置和大小,给标题、轴标签留出足够空间
  • 修改Y轴标题的旋转角度为0(默认垂直)并调整对齐方式,避免与Y轴刻度重叠
  • 调整X轴、Y轴标题的偏移量,进一步优化布局

内容的提问来源于stack exchange,提问作者STATBOY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:37:37