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

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 plt

def 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.kler.cn/a/508895.html

相关文章:

  • 谷歌宣布没 JavaScript 将无法启动搜索,居然引起了轩然大波
  • tlias部门管理-新增部门-接口开发
  • Google地图瓦片爬虫
  • 自动驾驶占用网格预测
  • Unity-Mirror网络框架-从入门到精通之RigidbodyPhysics示例
  • Python在DevOps中的应用:自动化CI/CD管道的实现
  • Spring Boot spring.factories文件详细说明
  • objectMapper详解
  • Navicat 17 功能简介 | 商业智能 BI
  • 链式前向星的写法
  • 【VS 调试WebApi —— localhost 及 ip访问】
  • AI在SEO中的关键词优化策略探讨
  • 内网渗透测试工具及渗透测试安全审计方法总结
  • 程序设计安全方案,软件开发安全指南,信息系统安全管理规范(Word原件)
  • Trie(算法版)
  • Vim 项目的现状
  • Leetcode3287:求出数组中最大序列值
  • 《内网穿透:网络拓展与安全防护的平衡艺术》
  • kubernetes学习-Service(七)
  • 浅谈云计算17 | 分布式存储
  • 【Linux】【Vim】vim编辑器的用法
  • 协同过滤:推荐系统的核心算法详解
  • 会话_JSP_过滤器_监听器_Ajax
  • SimpleHelp远程管理软件存在任意文件读取漏洞(CVE-2024-57727)
  • [STM32 HAL库]串口空闲中断+DMA接收不定长数据
  • 【Pandas】pandas Series apply