matplotlib修正坐标轴ylim的空白

本文介绍如何使用matplotlib绘制折线图时,解决因y轴最小值不在原点导致的底部空白问题。通过调整图的spines位置,使x轴对齐y轴最小值,并修复了设置spines后xticks属性消失的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用matplotlib绘制折线图后,我通过找y轴最小值的方式,绘制下图中的标注线,但是看到下面总是有一些空白,说明得到的y轴最小值不是在原点,就像x轴的第一个值一样。

bottom, top = plt.ylim() #获得y轴最大最小值
plt.plot([sLogit_max,sLogit_max],[bottom,start_logits[sLogit_max]], color ='red', linewidth=0.5, linestyle="--")
plt.plot([eLogit_max,eLogit_max],[bottom,end_logits[eLogit_max]], color ='red', linewidth=0.5, linestyle="--")

在这里插入图片描述
为了修正这个,可以通过设置spines(图中上下左右四个边框)。

 ax = plt.gca()    #获得当前axis
 bottom, top = plt.ylim() #获得y轴最大最小值
ax.spines['bottom'].set_position(('data', bottom)) 移动x轴到y轴最小值位置
plt.xticks(range(n_bins), passage, rotation=90, fontsize=4) 
#设置spines后xticks设置的属性消失,xticks放在后面

注意到设置spines后,横轴设置的文字属性消失。因此我把设置横轴文字放在设置spines后。
在这里插入图片描述

``` import tkinter as tk from tkinter import ttk from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import numpy as np from mpl_toolkits.mplot3d import Axes3D class PackingSystemApp: def __init__(self, master): self.master = master self.master.title("飞机拖车码垛系统") # 创建3D图形 self.fig = Figure(figsize=(5, 4), dpi=100) self.ax = self.fig.add_subplot(111, projection='3d') self.ax.set_xlim([0, 200]) self.ax.set_ylim([0, 80]) self.ax.set_zlim([0, 80]) self.canvas = FigureCanvasTkAgg(self.master, self.fig) self.canvas.draw() self.canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) # 创建待装载行李数量标签 self.label = ttk.Label(self.master, text="待装载行李数量:8") self.label.pack(side=tk.TOP, fill=tk.X) # 创建START和PAUSE按钮 self.start_button = ttk.Button(self.master, text="START", command=self.start) self.start_button.pack(side=tk.TOP, fill=tk.X) self.pause_button = ttk.Button(self.master, text="PAUSE", command=self.pause) self.pause_button.pack(side=tk.TOP, fill=tk.X) # 创建显示区域 self.display_frame = ttk.LabelFrame(self.master) self.display_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True) self.fill_rate_label = ttk.Label(self.display_frame, text="填充率:0 % 时间:0 s") self.fill_rate_label.pack(side=tk.TOP, fill=tk.X) # 创建控制按钮 self.control_frame = ttk.Frame(self.master) self.control_frame.pack(side=tk.BOTTOM, fill=tk.X) self.start_button_control = ttk.Button(self.control_frame, text="开启", command=self.start_simulation) self.start_button_control.pack(side=tk.LEFT) self.return_button_control = ttk.Button(self.control_frame, text="返回", command=self.return_to_main) self.return_button_control.pack(side=tk.LEFT) self.close_button_control = ttk.Button(self.control_frame, text="关闭", command=self.close) self.close_button_control.pack(side=tk.RIGHT) def start(self): print("Start button clicked") def pause(self): print("Pause button clicked") def start_simulation(self): print("Simulation started") def return_to_main(self): print("Return to main") def close(self): self.master.destroy() if __name__ == "__main__": root = tk.Tk() app = PackingSystemApp(root) root.mainloop()```运行后仍然报错,这是错误信息。D:\py project\pythonProject2\1.py:32: UserWarning: Glyph 36724 (\N{CJK UNIFIED IDEOGRAPH-8F74}) missing from font(s) DejaVu Sans. self.canvas.draw() Traceback (most recent call last): File "D:\py project\pythonProject2\1.py", line 73, in <module> app = PackingSystemApp(root) File "D:\py project\pythonProject2\1.py", line 45, in __init__ self.pause_button = ttk.Button(control_top_frame, text="PAUSE", command=self.pause) AttributeError: 'PackingSystemApp' object has no attribute 'pause'
03-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值