当我在 PyQt5 窗口中嵌入 Matplotlib 图形时,为啥有两个重复的轴标签?

     2023-03-30     174

关键词:

【中文标题】当我在 PyQt5 窗口中嵌入 Matplotlib 图形时,为啥有两个重复的轴标签?【英文标题】:Why there are two duplicate axes labels when I embed Matplotlib figure inside a PyQt5 window?当我在 PyQt5 窗口中嵌入 Matplotlib 图形时,为什么有两个重复的轴标签? 【发布时间】:2021-09-22 19:12:19 【问题描述】:

我正在尝试在 PyQt5 窗口中嵌入 Matplotlib 图。我正在使用以下代码:

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton
import sys
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

import numpy as np


class Window(QMainWindow):
    def __init__(self):

        super().__init__()
        title ='Matplotlib Embedding In PyQt5'
        top=  400
        left = top
        width = 900
        height = 500
        self.setWindowTitle(title)
        self.setGeometry(left, top, width, height)
        self.ui()

    def ui(self):
        canvas1 = Canvas(self, width=4, height=4)

        button = QPushButton('Click me', self)
        button.move(250, 450)
        self.plot(canvas1)

    def plot(self, canvas):
        x= np.linspace(0, 1, 200)
        y = np.sinc(x)
        ax = canvas.figure.add_subplot(111)
        ax.plot(x,y)

class Canvas(FigureCanvas):
    def __init__(self, parent=None, width=5, height=5, dpi = 100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)
        


app = QtWidgets.QApplication(sys.argv)

main_window = Window()
main_window.show()

sys.exit(app.exec())

但是,当我运行它时(使用 Python 3.8.10),我得到:

如您所见,坐标轴标签有问题。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您正在创建 2 个轴:

self.axes = fig.add_subplot(111)
ax = canvas.figure.add_subplot(111)

解决方案是重用现有的轴:

def plot(self, canvas):
    x = np.linspace(0, 1, 200)
    y = np.sinc(x)
    canvas.axes.plot(x, y)

或者清理之前的图:

def plot(self, canvas):
    x = np.linspace(0, 1, 200)
    y = np.sinc(x)
    canvas.figure.clear()
    ax = canvas.figure.add_subplot(111)
    ax.plot(x, y)

【讨论】:

Matplotlib 将图形嵌入到 UI PyQt5

...aphintoaUIPyQt5【发布时间】:2017-04-1816:00:36【问题描述】:我在另一个脚本中有一个绘制图表的函数,所以该图表已经预先绘制,我只想将它放在我的PyQt5界面上的一个小部件中。我已经导入它,当它运行时会打开两个窗口,一个... 查看详情

如何在pyqt5中显示隐藏窗口?

...1-12-1615:42:04【问题描述】:我有两个代码:untitled.pyvprs.py当我切换到新窗口(vprs.py)时,第一个窗口被隐藏(untitled.py)。在窗口vprs.py我有一个“返回”按钮,当我点击这个按钮时如何让第一个窗口出现(untitled.py)。代码如下... 查看详情

为啥在 PyQt5 中打开新窗口时我的应用程序会关闭?

...7-10-2400:00:41【问题描述】:~EDIT(原来的问题还在下面)~当我在新窗口中删除self.setGeometry()调用时,它会正常工作。这是为什么?我仍在为它构建UI,但是一旦我这样做了,我希 查看详情

pyqt5 无法将边框应用于无框窗口

...pyqt5中的setStyleSheet函数应用了边框宽度和边框颜色。但是当我在无框窗口中使用它时,没有应用边框。我的代码有什么问题吗?我需要帮助。我的代码来了。importsysfromPyQt5.QtWidgetsimportQWidge 查看详情

pyqt5常用窗口总结

PyQt5最常见的窗口有三种,分别是MainWindow、Widget和DialogMainWindow:即主窗口,主要为用户提供一个带有菜单栏、工具栏和状态栏的窗口。Widget:通用窗口,在PyQt5中,没有嵌入到其他控件中的控件统称为窗口... 查看详情

无法在 Pyqt5 上保存我的窗口的大小和位置

...【发布时间】:2019-06-2415:51:39【问题描述】:无论如何,当我在屏幕上移动或/和调整窗口大小时,我想保留此参数以备下次运行我的应用程序时使用,但这是不可能的。我打开一个新问题,因为我在pyqt5部分没有看到我发布的her... 查看详情

在 PyQt5 中打开一个窗口和关闭一个窗口

...迎屏幕加载一个带有UI窗口的新类,同时关闭欢迎屏幕。当我单击按钮打开新窗口时,它可以正常打开,但我只想关闭动作事件的第一个窗口。我尝试了.hide()、.terminate()、.destroy(),但窗口仍然存在。这是相关代码:class 查看详情

无法在 pyqt5 中嵌入的 matplotlib 上绘制线条

...述】:以下是代码。它通过按下按钮绘制一条线。但是,当我按下按钮时,它只是打印出来matplotlib.lines.Line2D对象在0x11371fcc0......但无法在画布上显示线条。你是怎么解决的?importmatpl 查看详情

PyQt5 - 在新窗口中打开 QMediaplayer 并播放视频

...解,但我正在努力使用PyQt5和Python3在新窗口中打开视频。当我运行这段代码时:fromPyQt5.QtMultimediaWidgetsimportQVideoWidg 查看详情

当我使用线程时,PyQt5 中没有更新 GUI

】当我使用线程时,PyQt5中没有更新GUI【英文标题】:NoupdateGUIinPyQt5WhenIusethreads【发布时间】:2019-03-0816:40:00【问题描述】:我从带有ModbusLib的控制器中读取了有关温度和电压的信息。当我在“尝试...除”中执行此操作时,一切... 查看详情

使用 move() 方法 PyQt5 时 QPushButon 不显示

...:08:09【问题描述】:我有一个应该重现声音的简单窗口,当我创建QPushButton时,它会按预期显示在左上角,但是当我在其中任何一个上使用move()时,它们只是不再出现在窗口中。classMainWindow(QMainWind 查看详情

能够在 PyQt5 中一次打开多个对话框的单窗口模式?

...satonceinPyQt5?【发布时间】:2020-09-2220:12:12【问题描述】:当我打开一个新对话框时,我在PyQt5/PySide2中使用以下代码来创建单模式窗口应用程序:dialog.setWindowModality(QtCore.Qt.Applicat 查看详情

pyQt5在同一窗口中添加多张图片

...具有类似于歌曲标题、专辑、艺术家等图标的行为...但是当我尝试这段代码时pic=QtGui.QLabel(self)pic.se 查看详情

在 pyqt5 的继承窗口上创建新组件

】在pyqt5的继承窗口上创建新组件【英文标题】:Createnewcomponentsonaninheritedwindowinpyqt5【发布时间】:2019-08-2918:37:46【问题描述】:我正在开发一个用PYQT5制作的小型GUI。我有一个带有几个按钮的主窗口,它们可以打开新窗口。其... 查看详情

我的绘图未显示在我的 pyqt5.QtWidgets

...学习如何将pyqt5与matplotlib一起使用,因此请实现此代码,当我在另一个窗口中按下按钮后会弹出此代码我创建了另一个名为canvas的类,以便将来创建多个图形,例如条形图和直方图当我运行此代码时,窗口会出现, 查看详情

无法在 PyQt5 中打开多个窗口

...能够相互打开。我已经获得了打开主页的启动页面,但是当我单击主页上的相应按钮打开其他页面时,它会使我的程序崩溃。任何有助于解决此问题的帮助将不胜感激。我的代码如下:impor 查看详情

PyQt5 - 使用 Line Edit 从编辑窗口更新标签

...owusingLineEdit【发布时间】:2019-03-1017:47:48【问题描述】:我在创建程序时遇到了麻烦,其中我有两个窗口,主窗口在其中您可以看到所有数据,另一个是编辑窗口,其中使用编辑中的行编辑从主窗口编辑或更新标签窗口我想将编... 查看详情

在 PyQT5 中使用 matplotlib 复选按钮

...用matplotlib复选按钮?代码如下,情节有效,它嵌入在PyQT窗口中,但检查按钮没有按应有的方式添加或删除系列。代码从PyQT中取出后可以正常工作。importnumpyasnpimportsysfrom 查看详情