python matplotlib绘图,显示和保存没有标题栏和菜单栏的图像

server/2025/1/20 0:57:19/

目录

1. 使用plt.savefig保存无边框图形

2. 显示在屏幕上,并且去掉窗口的标题栏和工具栏

3. 通过配置 matplotlib 的 backend 和使用 Tkinter(或其他图形库)

方法 1:使用 TkAgg 后端,并禁用窗口的工具栏和标题栏

示例代码:

解释:

方法 2:使用 Agg 后端保存图片,不显示工具栏

示例代码:

解释:

方法 3:使用 matplotlib 和 pyautogui 截图窗口区域

示例代码:

解释:

总结:


不知道是不是有人和我一样在苦恼在截取python plt绘制的图像时,不能快速截取图像显示区(因为存在窗口的标题栏和工具栏,所以需要使用截图工具自己选择图像显示区),这样截取的图像,质量和大小不一定满意。

下面就是尝试解决这个问题。

1. 使用plt.savefig保存无边框图形

如果你的目的是生成一个图形并保存为文件,而不是在屏幕上显示,可以使用plt.savefig方法,并设置bbox_inches='tight'参数来去除多余的空白边缘。此外,可以设置pad_inches=0来进一步减少边缘空白。

import matplotlib.pyplot as plt# 创建图形
plt.figure()
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Example Plot')# 保存图形,去除多余空白
plt.savefig('plot.png', bbox_inches='tight', pad_inches=0)# 清理
plt.close()

效果如下:

2. 显示在屏幕上,并且去掉窗口的标题栏和工具栏

import matplotlib.pyplot as pltdef on_key(event):if event.key == 'escape':  # 如果按下的是ESC键plt.close(fig)  # 关闭图像窗口# 禁用工具栏
plt.rcParams['toolbar'] = 'None'  # 禁用工具栏# 使用 TkAgg 后端,适用于禁用工具栏和标题栏
plt.switch_backend('TkAgg')# 创建图形
fig, ax = plt.subplots()# 设置图形内容
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Example Plot')# 去除标题栏并显示图像
fig.canvas.manager.window.overrideredirect(True)  # 去除窗口的标题栏
fig.canvas.mpl_connect('key_press_event', on_key)
# 保持图形显示 5 秒(可以根据需要调整时间)
# plt.pause(5)  # 这里是保持显示的时间
# 显示图形,直到手动关闭
plt.show(block=True)

在屏幕上显示:

这样很多截图工具(如weixin的alt+a)可以直接识别到整个区域。

在按下exc键的时候关闭图像:

import matplotlib.pyplot as plt# 禁用工具栏
plt.rcParams['toolbar'] = 'None'  # 禁用工具栏# 使用 TkAgg 后端,适用于禁用工具栏和标题栏
plt.switch_backend('TkAgg')# 创建图形
fig, ax = plt.subplots()# 设置图形内容
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Example Plot')# 去除标题栏并显示图像
fig.canvas.manager.window.overrideredirect(True)  # 去除窗口的标题栏
# 定义按键事件回调函数
def on_key(event):if event.key == 'escape':  # 如果按下的是ESC键plt.close(fig)  # 关闭图像窗口# 绑定按键事件
fig.canvas.mpl_connect('key_press_event', on_key)
# 保持图形显示 5 秒(可以根据需要调整时间)
# plt.pause(5)  # 这里是保持显示的时间
# 显示图形,直到手动关闭
plt.show(block=True)

import matplotlib.pyplot as plt# 禁用工具栏
plt.rcParams['toolbar'] = 'None'  # 禁用工具栏# 使用 TkAgg 后端,适用于禁用工具栏和标题栏
plt.switch_backend('TkAgg')# 创建图形
fig, ax = plt.subplots()# 设置图形内容
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Example Plot')# 获取 Tkinter 窗口对象
window = fig.canvas.manager.window# 去除窗口的标题栏
window.overrideredirect(True)# 设置窗口始终保持在最前面
window.attributes('-topmost', 1)  # 设置窗口为最上层# 定义按键事件回调函数
def on_key(event):if event.key == 'escape':  # 如果按下的是ESC键plt.close(fig)  # 关闭图像窗口# 绑定按键事件
fig.canvas.mpl_connect('key_press_event', on_key)# 显示图形
plt.show(block=True)

3. 通过配置 matplotlibbackend 和使用 Tkinter(或其他图形库)

要禁用 matplotlib 图形窗口中的工具栏和窗口标题栏,可以通过配置 matplotlibbackend 和使用 Tkinter(或其他图形库)来进行窗口控制。下面是两种常用的方式,能够帮助你轻松获取需要的图像,避免工具栏和窗口标题栏。

方法 1:使用 TkAgg 后端,并禁用窗口的工具栏和标题栏

matplotlib 中,TkAgg 是一个常用的后端,它允许你通过 Tkinter 控制窗口。你可以创建一个没有标题栏和工具栏的窗口。

示例代码:
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk# 创建 Tkinter 窗口
root = tk.Tk()# 禁用窗口标题栏
root.overrideredirect(True)  # 取消标题栏# 创建图形
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Example Plot')# 将图形嵌入 Tkinter 窗口
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()# 显示图形
canvas.get_tk_widget().pack()# 设置窗口大小
root.geometry("400x300")# 显示窗口
root.mainloop()

解释:

  • root.overrideredirect(True):这行代码会移除窗口的标题栏和工具栏,使得只有绘图区域显示在屏幕上。
  • 该方法只显示图形内容,去除了任何工具栏、标题栏和边框,非常适合截取图像。

方法 2:使用 Agg 后端保存图片,不显示工具栏

如果你的目的是直接保存图像而不是显示窗口,可以使用 Agg 后端来避免打开任何窗口(没有标题栏和工具栏),直接将图形保存为文件。

示例代码:
import matplotlib.pyplot as plt# 切换到Agg后端,这样不会弹出窗口
plt.switch_backend('Agg')# 创建图形
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Example Plot')# 保存图形,去除空白
fig.savefig('plot_without_toolbar.png', bbox_inches='tight', pad_inches=0)# 清理
plt.close()

解释:

  • plt.switch_backend('Agg'):切换到 Agg 后端,这种后端不会弹出图形窗口,而是直接将图像保存为文件。这样就没有标题栏、工具栏,也不会弹出任何窗口。
  • fig.savefig('plot_without_toolbar.png', bbox_inches='tight', pad_inches=0):保存图形时,使用 bbox_inches='tight' 去除多余的空白。

方法 3:使用 matplotlibpyautogui 截图窗口区域

如果你不希望关闭窗口,只是想截取窗口内容并去除工具栏和标题栏,可以使用 pyautogui 截取屏幕上的指定区域。你可以通过设置窗口的位置和尺寸,避免工具栏和标题栏的干扰。

示例代码:
import matplotlib.pyplot as plt
import pyautogui
import time# 创建图形
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Example Plot')# 显示图形
plt.show(block=False)# 等待图形显示
time.sleep(1)# 获取屏幕截图,排除标题栏和菜单栏
screenshot = pyautogui.screenshot(region=(100, 100, 800, 600))  # 根据实际窗口调整区域# 保存截图
screenshot.save('screenshot_no_toolbar.png')
print("Screenshot saved as 'screenshot_no_toolbar.png'")# 清理
plt.close()

解释:

  • pyautogui.screenshot(region=(x, y, width, height)):这行代码截取了屏幕的指定区域。你需要调整 (x, y, width, height),使其排除标题栏和工具栏,仅截取绘图区域。

总结:

  • 方法 1:使用 TkAgg 后端并禁用窗口标题栏和工具栏,可以让你只显示绘图区域。
  • 方法 2:使用 Agg 后端,直接保存图像而不弹出任何窗口。
  • 方法 3:使用 pyautogui 截取屏幕区域,以避免工具栏和标题栏的干扰。

这些方法可以帮助你轻松获取所需的图像,去除工具栏和标题栏的干扰。


http://www.ppmy.cn/server/159764.html

相关文章

Prompt-人工智能领域的核心技术与创新理念

在人工智能领域,“Prompt” 是一个至关重要的概念,其全称为 Prompt Engineering,意为提示工程。Prompt是指设计和输入特定的提示语句,以引导大语言模型(LLM, Large Language Model)生成符合预期的输出。随着…

Vue.js组件开发-如何实现路由懒加载

在Vue.js应用中,路由懒加载是一种优化性能的技术,它允许在需要时才加载特定的路由组件,而不是在应用启动时加载所有组件。这样可以显著减少初始加载时间,提高用户体验。在Vue Router中,实现路由懒加载非常简单&#xf…

学习笔记081——如何备份服务器中MySQL数据库数据?

方法: 可以通过编写sh脚本的方式,结合Linux中的crontab定时任务来实现定时备份数据的功能。 sh脚本如下: #!/bin/bash# 要备份的数据库 DB_NAME"wms" # 数据库账号 DB_USER"root" # 数据库密码 DB_PASSWORD"12345…

VSCode 的部署

一、VSCode部署 (1)、简介 vsCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、版本管理GIT等特性&…

Android 北斗与平台芯片相关

咨询一下这些平台芯片(mt6739 , mt6761 , mt6765 , mt6771)是否支持北斗三号的定位功能? 还有就是这个功能区分android版本吗?android9.0到android12都支持? 回复: 1、 6…

RabbitMQ---TTL与死信

(一)TTL 1.TTL概念 TTL又叫过期时间 RabbitMQ可以对队列和消息设置TTL,当消息到达过期时间还没有被消费时就会自动删除 注:这里我们说的对队列设置TTL,是对队列上的消息设置TTL并不是对队列本身,不是说队列过期时间…

【C++】揭秘类与对象的内在机制(核心卷之深浅拷贝与拷贝构造函数的奥秘)

文章目录 一、前置知识---深浅拷贝1. 浅拷贝2. 深拷贝 1. 拷贝构造函数1. 默认生成的拷贝构造函数能干什么?2. 怎么写拷贝构造函数 前景提要:该篇文章的内容接上一篇,希望大家可以先学习上一篇文章讲到的构造函数和析构函数,否则可…

Python大数据可视化:基于python的电影天堂数据可视化_django+hive

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 电影数据 看板展示 我的信息 摘要 电影天堂数据可视化是…