在Tkinter中集成Matplotlib:移除填充实现图表全屏显示
解决Matplotlib嵌入CustomTkinter时的填充移除问题
我正在尝试将Matplotlib集成到CustomTkinter中,通过FigureCanvasTkAgg已经实现了基础嵌入,但有两个需求:
- 移除Y轴刻度(已实现)
- 让图表覆盖整个可用区域,移除所有填充
之前找到的解决方案都用到了plt.savefig的参数,但我不需要保存图片,不想用先存再显示的不规范方法,求更优解。
最优解决方案
不需要依赖savefig,直接通过调整Matplotlib的子图布局和边距参数就能实现,核心是让子图完全填满Figure区域,并移除数据与轴的默认空白。
修改后的完整代码
import customtkinter import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import numpy as np root = customtkinter.CTk() root.geometry('600x500') # figure figure = plt.Figure() ax = figure.add_subplot(111) ax.yaxis.set_visible(False) # 关键修改:移除数据与坐标轴的边距 ax.margins(0) # 将子图设置为完全覆盖整个Figure区域 ax.set_position([0, 0, 1, 1]) t = np.arange(0, 3, .01) ax.plot(t, 2 * np.sin(2 * np.pi * t)) # 可选:若不需要坐标轴边框,可取消注释消除边框空白 # ax.spines[['top', 'right', 'left', 'bottom']].set_visible(False) # 添加到Tkinter容器 canvas = FigureCanvasTkAgg(figure, master=root) canvas.draw() canvas.get_tk_widget().pack(fill='both', expand=True) root.mainloop()
参数说明
ax.margins(0):消除数据折线与坐标轴之间的默认空白,让折线紧贴轴的边缘ax.set_position([0, 0, 1, 1]):四个参数分别对应子图在Figure中的左边界、下边界、宽度、高度,取值范围0-1(代表Figure的百分比),设置为[0,0,1,1]即可让子图完全填满整个Figure- 关闭spine:如果不需要显示坐标轴边框,取消注释对应代码后,能进一步消除边框带来的视觉空白
内容的提问来源于stack exchange,提问作者Another_coder
相关产品推荐
相关产品推荐

