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 删除。