Matplotlib+PyQt5【01】在QMainWindow中嵌入Figure

        前言----Matplotlib绘制图形

        Matplotlib是一个用于创建静态动画的综合库,以及Python中的交互式可视化。

        引入matplotlib.pyplot,matplotlib.pyplot是Matplotlib的基于状态的接口

import matplotlib.pyplot as plt

 部分常用功能:

axes将轴添加到当前图形并使其成为当前轴。
axis获取或设置某些轴属性的方便方法。
bar绘制条形图。
cla清除当前轴。
clf清除当前数字。
close关闭图形窗口。
colorbar在绘图中添加颜色条。
contour绘制等高线。
contourf绘制等高线。
delaxes删除 Axes (默认为当前轴)。
draw重新绘制当前图形。
figtext将文本添加到图中。
figure创建新地物或激活现有地物。
fill绘制填充多边形。
fill_between填充两条水平曲线之间的区域。
hist绘制柱状图。
ion打开交互模式。
isinteractive返回pyplot是否处于“交互模式”。
legend在轴上放置图例。
pie绘制饼图。
plot绘制Y和X作为直线和/或标记。
plot_date包含日期的绘图数据。
polar绘制极坐标图。
rcdefaults恢复 rcParams 来自Matplotlib的内部默认样式。
rgrids获取或设置当前极坐标图上的径向网格线。
savefig保存当前图形。
scatter绘制散点图
show显示所有打开的图形。
stackplot绘制堆积面积图。
stem创建一个茎图。
step绘制一个步进图。
streamplot绘制矢量流的流线。
subplot在当前图形中添加子批次。
subplots创建一个数字和一组子批次。
text将文本添加到轴。
title为轴设置标题。
xlabel设置X轴的标签。
xlim获取或设置当前轴的X限制。
xscale设置X轴比例。
xticks获取或设置X轴的当前刻度位置和标签。
ylabel设置Y轴的标签。
ylim获取或设置当前轴的Y限制。
yscale设置Y轴比例。
yticks获取或设置Y轴的当前刻度位置和标签。

引入numpy,准备数据

import numpy as np

x = np.linspace(0,10,1000)
y1 = np.sin(x)

 绘制图形并显示

plt.plot(x,y)
plt.show()

效果展示,y=sinx在区间[0,10]的函数图像(plot()方法是绘制直线或者点,所以这个函数图像也只是直线近似得到的,将1000改为小一点的数字,如10,可以得到10个点所连的折线,这个数字越大,“曲线”就越光滑)

 

那么如何将画布(图形)嵌入到PyQt中呢?

----------------------------------------------------分割线--------------------------------------------------------------------

        设置一个Matplotlib画布(canvas)FigureCanvasQTAgg,这个画布对象也是一个QWidget,因此可以像任何组件一样直接嵌入到应用程序里,效果如下:

         直接上代码:

import sys
import numpy as np

from PyQt5 import QtWidgets

import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure

#创建一个matplotlib图形绘制类
class MyCanvas(FigureCanvasQTAgg):
    def __init__(self, parent=None, width=8, height=8, dpi=120):
        #画布显示中文(微软雅黑)
        plt.rcParams['font.family'] = ['Microsoft YaHei']
        #坐标轴显示负‘-’号
        plt.rcParams['axes.unicode_minus'] = False
        #第一步:创建一个创建Figure
        fig = Figure(figsize=(width, height), dpi=dpi)
        #第二步:创建一个子图,用于绘制图形用,111表示子图编号,类似matlab的subplot(1,1,1),111也可省略
        self.axes = fig.add_subplot(111)
        #第三步:在父类中激活Figure窗口
        super(MyCanvas, self).__init__(fig)

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        # 实例化
        F = MyCanvas(self)
        # 标题
        F.axes.set_title("图像展示",fontsize=15)
        # 坐标轴设置
        F.axes.set_xlabel("X轴",size=13,loc='right',c='k',labelpad=0)
        F.axes.set_ylabel("Y轴",size=13,loc='top',c='k',labelpad=0)
        F.axes.set_xticks(np.arange(0,5,0.5),minor=True)
        F.axes.set_yticks(np.arange(0,5,0.5),minor=True)
        F.axes.set_xlim(0,5)
        F.axes.set_ylim(0,5)
        F.axes.grid(True,'major','both',color='k',linestyle=':',linewidth=0.8)

        # 准备数据
        x= np.linspace(0,5,1000)
        y2=(x)**2
        y3=x**0.5
        y4=(x**3+7)/(2*x**2+0.5)
        y5=x
        # 画图
        F.axes.plot(x,y2,label=r'$y=x^{2}$')
        F.axes.plot(x,y3,label=r'$y=x^{0.5}$')
        F.axes.plot(x,y4,label=r'$y=\frac{x^3+7}{2x^2+0.5}$')
        F.axes.plot(x,y5,'r-',label=r'$y={x}$')
        # 图例
        F.axes.legend()
        # 嵌入画布
        self.setCentralWidget(F)
        # 显示
        self.show()

app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
app.exec_()

        图例格式采用LaTex,调用F.axes.legend()来显示图例,图例的设置还有其他方法,比如:

line1,=F.axes.plot(x,y2)
label1=r'$y=x^{2}$'
line2,=F.axes.plot(x,y3)
label2=r'$y=x^{0.5}$'
line3,=F.axes.plot(x,y4)
label3=r'$y=\frac{x^3+7}{2x^2+0.5}$'
line4,=F.axes.plot(x,y5,'r-')
label4=r'$y={x}$'
# 图例
F.axes.legend([line1,line2,line3,line4],[label1,label2,label3,label4],frameon=True)

         这样就可以简单实现将matplotlib嵌入到PyQt中,但是发现没有默认工具栏

 后续将添加此工具栏。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值