前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PySide6 GUI 编程(48): 基于Matplotlib绘制函数曲线

PySide6 GUI 编程(48): 基于Matplotlib绘制函数曲线

原创
作者头像
bowenerchen
发布2024-09-19 14:54:54
2720
发布2024-09-19 14:54:54
举报
文章被收录于专栏:编码视界

示例代码

代码语言:python
代码运行次数:0
复制
from __future__ import annotations

import sys
from typing import List, Tuple

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget


class MatplotlibWidget(QWidget):
    def __init__(self, name: str, points: List[Tuple[float, float]]):
        super().__init__()
        plt.rcParams['font.size'] = 14  # 字体大小
        plt.rcParams['axes.unicode_minus'] = False  # 解决负号 '-' 显示为方块的问题

        # 创建 Matplotlib 图形
        self.figure, self.ax = plt.subplots()
        # FigureCanvas 是 Matplotlib 的一个类
        # 专门用于将 Matplotlib 图形嵌入到 Qt 应用程序中
        # 具体来说,FigureCanvasQTAgg 是一个后端类
        # 它实现了 FigureCanvas,并提供了与 Qt 的集成
        self.canvas = FigureCanvas(self.figure)

        # 设置布局
        layout = QVBoxLayout()
        layout.addWidget(self.canvas)
        self.setLayout(layout)

        # 绘制函数曲线
        self.plot(name, points)

    def plot(self, name: str, points: List[Tuple[float, float]]):
        # 清空之前的图形
        self.ax.clear()

        # 生成 X 值
        x = [i[0] for i in points]
        # 计算 Y 值
        y = [i[1] for i in points]

        # 绘制曲线
        self.ax.plot(x, y, label = name, color = 'red', linewidth = 3)
        self.ax.set_title(name)
        self.ax.set_xlabel('x')
        self.ax.set_ylabel('y')
        self.ax.grid()
        self.ax.legend()

        # 刷新画布
        self.canvas.draw()


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Matplotlib in PySide6")
        x = np.linspace(-10, 10, 1000)

        # 创建 MatplotlibWidget 实例
        self.matplotlib_widget = MatplotlibWidget('sin(x)', [(i, np.sin(i)) for i in x])
        self.setCentralWidget(self.matplotlib_widget)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    app.exec()

运行效果

函数曲线
函数曲线

遗留问题

Matplotlib 似乎对中文的支持不太好,如果有中文字符要展示的话可能会乱码?

如果需要展示中文则需要在编码时特殊处理。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例代码
  • 运行效果
  • 遗留问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档