当前位置: 首页 > news >正文

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

目录

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 截取屏幕区域,以避免工具栏和标题栏的干扰。

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

相关文章:

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

目录 1. 使用plt.savefig保存无边框图形 2. 显示在屏幕上,并且去掉窗口的标题栏和工具栏 3. 通过配置 matplotlib 的 backend 和使用 Tkinter(或其他图形库) 方法 1:使用 TkAgg 后端,并禁用窗口的工具栏和标题栏 …...

无人机(Unmanned Aerial Vehicle, UAV)路径规划介绍

无人机(Unmanned Aerial Vehicle, UAV)是无人驾驶飞行器的简称。凭借其体积小巧、操作简便、生存能力强等诸多优势,无人机在军事、电力巡检、航空航天与科学研究等诸多领域得到了广泛应用。在执行任务时,无人机可搭载多种传感器设…...

python爬虫入门(实践)

python爬虫入门(实践) 一、对目标网站进行分析 二、博客爬取 获取博客所有h2标题的路由 确定目标,查看源码 代码实现 """ 获取博客所有h2标题的路由 """url "http://www.crazyant.net"import re…...

于灵动的变量变幻间:函数与计算逻辑的浪漫交织(下)

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 这一节我们主要来学习单个函数的声明与定义,static和extern… 这里写目录标题 一、单个函数…...

python实现pdf转word和excel

一、引言   在办公中,我们经常遇收到pdf文件格式,因为pdf格式文件不易修改,当我们需要编辑这些pdf文件时,经常需要开通会员或收费功能才能使用编辑功能。今天,我要和大家分享的,是如何使用python编程实现…...

Pandas使用笔记

个人学习笔记 日期转换 索引日期格式:2023-09-12 15:00:00 转换为:2023-09-12 import pandas as pd# 假设你的 DataFrame 名为 df,索引是 2023-09-12 15:00:00 # 这里创建一个示例 DataFrame 用于演示 data {value: [1, 2, 3]} index pd…...

高等数学学习笔记 ☞ 定积分与积分公式

1. 定积分的基本概念 1.1 定积分的定义 1. 定义:设函数在闭区间上有界。在闭区间上任意插入若干个分点,即, 此时每个小区间的长度记作(不一定是等分的)。然后在每个小区间上任意取,对应的函数值为。 为保证每段的值(即矩形面积)无…...

wow-agent---task2使用llama-index创建Agent

一:创造俩个函数,multiply和add作为fuction calling被LLM当做工具来使用,实现计算一个简单的计算题: from llama_index.llms.ollama import Ollama from llama_index.core.agent import ReActAgent from llama_index.core.tools …...

RabbitMQ实现延迟消息发送——实战篇

在项目中,我们经常需要使用消息队列来实现延迟任务,本篇文章就向各位介绍使用RabbitMQ如何实现延迟消息发送,由于是实战篇,所以不会讲太多理论的知识,还不太理解的可以先看看MQ的延迟消息的一个实现原理再来看这篇文章…...

Oracle 拉链式merge sort join 原理

Oracle 拉链式Merge Sort Join 的原理,我用一个生活中的比喻来解释。 --- 比喻场景:匹配快递包裹和收件人 1. 快递包裹清单 想象我们有一个快递公司送货的包裹清单,清单按照收件人的邮编(ZIP Code)排序: …...

QModbusTCPClient占用内存持续增长

最近使用QModbusTCPClient通信,需要频繁发送读写请求,发现软件占用内存一直在增减,经过不断咨询和尝试,终于解决了。 1.方案一(失败) 最开始以为是访问太频繁,导致创建reply的对象比delete re…...

代码中使用 Iterable<T> 作为方法参数的解释

/*** 根据课程 id 集合查询课程简单信息* param ids id 集合* return 课程简单信息的列表*/ GetMapping("/courses/simpleInfo/list") List<CourseSimpleInfoDTO> getSimpleInfoList(RequestParam("ids") Iterable<Long> ids); 一、代码解释&…...

Oracle数据库传统审计怎么用

Oracle数据库传统审计怎么用 审计功能开启与关闭By Session还是By AccessWhenever Successful数据库语句审计数据库对象审计查看审计策略和记录Oracle数据库审计功能分为传统审计(Traditional Auditing)和统一审计(Unified Auditing)。统一审计是从Oracle 12c版本开始引入的…...

leetcode-买卖股票问题

309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 动态规划解题思路&#xff1a; 1、暴力递归&#xff08;难点如何定义递归函数&#xff09; 2、记忆化搜索-傻缓存法&#xff08;根据暴力递归可变参数确定缓存数组维度&#xff09; 3、严格表结构依…...

MYSQL学习笔记(三):分组、排序、分页查询

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇是讲解分组、排序、分页查询&#xff0c;并且结合案例进行讲解&#xff1b;虽…...

上位机工作感想-2024年工作总结和来年计划

随着工作年限的增增长&#xff0c;发现自己越来越不喜欢在博客里面写一些掺杂自己感想的东西了&#xff0c;或许是逐渐被工作逼得“成熟”了吧。2024年&#xff0c;学到了很多东西&#xff0c;做了很多项目&#xff0c;也帮别人解决了很多问题&#xff0c;唯独没有涨工资。来这…...

【视觉惯性SLAM:十六、 ORB-SLAM3 中的多地图系统】

16.1 多地图的基本概念 多地图系统是机器人和计算机视觉领域中的一种关键技术&#xff0c;尤其在 SLAM 系统中具有重要意义。单一地图通常用于表示机器人或相机在环境中的位置和构建的空间结构&#xff0c;但单一地图在以下情况下可能无法满足需求&#xff1a; 大规模场景建图…...

【C++笔记】红黑树封装map和set深度剖析

【C笔记】红黑树封装map和set深度剖析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】红黑树封装map和set深度剖析前言一. 源码及框架分析1.1 源码框架分析 二. 模拟实现map和set2.1封装map和set 三.迭代器3.1思路…...

4.若依 BaseController

若依的BaseController是其他所有Controller的基类&#xff0c;一起来看下BaseController定义了什么 1. 定义请求返回内容的格式 code/msg/data 返回数据格式不是必须是AjaxResult&#xff0c;开发者可以自定义返回格式&#xff0c;注意与前端取值方式一致即可。 2. 获取调用…...

vue项目配置多语言

本文详细介绍如何在 Vue 项目中集成 vue-i18n 和 Element-UI &#xff0c;实现多语言切换&#xff1b;首先通过 npm 安装 vue-i18n 和相关语言包&#xff0c;接着在配置文件中设置中文和英文的语言信息&#xff1b;最后在 main.js 中导入并挂载多语言实例&#xff0c;实现切换地…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...