Matplotlib绘图库的高级使用

news2024/10/5 19:17:20

Matplotlib绘图库的高级使用

  • Matplotlib的三层结构
    • 容器层
    • 辅助显示层
    • 图像层
  • Matplotlib的绘图配置
    • 设置画布属性
    • 绘图保存
    • 自定义x与y刻度
    • 解决中文显示异常
    • 网格显示
    • 多次plot
    • 绘图标记
    • 显示图例
    • 多个坐标系显示

Matplotlib的三层结构

Matplotlib从层次结构上分,可以分为三层:容器层、辅助显示层、图像层。

容器层

容器层主要由Canvas、Figure、Axes组成。

Canvas对象

Canvas对象是一个表示画布的类,用于渲染绘图元素。它是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。

Figure对象

它是Canvas上方的第一层容器,用于表示整个图像窗口,包含所绘制的所有元素。可以通过 plt.figure() 函数创建一个新的 Figure 对象。每个Figure对象包含了一个或多个Axes对象。

Axes对象

它是Canvas上方的第二层,是一个绘图区域,用于展示数据,它包含了所有的绘图元素,如:直线、曲线、文本、图像、坐标系等。每个Axes对象对应一个坐标系,使用fig.add_subplot()或plt.subplots() 函数创建Axes对象。

Axis是一个坐标轴,用于确定数据的范围和刻度。每个Axes对象都有两个Axis对象,分别对应x轴和y轴。可以使用 ax.set_xlim()和 ax.set_ylim() 函数设置坐标轴的范围,使用ax.set_xticks() 和 ax.set_yticks() 函数设置坐标轴的刻度。

注意:

当创建一个 Figure 对象时,它会自动创建一个 Axes 对象,并将其添加到 Figure 对象中。然后可以在 Axes 对象中绘制各种类型的图表。

创建Figure和Axes对象,并在Axes对象中绘制折线图:

import matplotlib.pyplot as plt

# 创建 Figure 对象
fig = plt.figure()

# 创建 Axes 对象
ax = fig.add_subplot(111)

# 绘制折线图
x = [1, 2, 3, 4, 5]
y = [10, 8, 6, 4, 2]
ax.plot(x, y)

# 显示图形
plt.show()

在这里插入图片描述

辅助显示层

辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。

简单的说就是用于添加特殊的文本、箭头、注释和图例等可视化元素。这些元素不像常规的数据展示元素那样直接反映数据本身,而是用于强调或解释数据以及提供更多信息。

这些辅助元素可帮助用户更好地理解图形,深入理解这些元素的使用,可以使数据可视化更加精确和友好。

Matplotlib中常用的辅助显示层:

Text:用于在图表中添加文本注释。可以使用 ax.text() 函数将文本添加到 Axes 对象中,或使用 fig.text() 函数将文本添加到 Figure 对象中。

Annotations:用于在图表中添加带有箭头的注释。可以使用 ax.annotate() 函数添加注释。

Legends:用于为图表中的数据系列添加说明。可以使用 ax.legend() 函数添加图例。

Colorbars:用于显示颜色映射和值范围。可以使用 fig.colorbar() 函数添加颜色条。

在 Matplotlib 图表中添加文本、注释、图例和颜色条:

import matplotlib.pyplot as plt
import numpy as np

# 使用np.linspace() 函数生成了一组正弦曲线数据
x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)

# 创建 Figure 对象和 Axes 对象
fig, ax = plt.subplots()

# 绘制正弦曲线
ax.plot(x, y, label='sin')

# 添加标题和标签
ax.set_title('Sin Wave')
ax.set_xlabel('x')
ax.set_ylabel('y')

# 添加文本
ax.text(-3, 0.8, 'Peak Value', fontsize=12)

# 使用annotate() 函数添加了一个带箭头的注释
ax.annotate('Local Max', xy=(np.pi/2, 1), xytext=(2, 1.5),
            arrowprops=dict(facecolor='black', shrink=0.05))

# 添加图例
ax.legend()

# 添加颜色条
im = ax.imshow([[0, 1], [2, 3]], cmap='jet')
fig.colorbar(im)

# 显示图形
plt.show()

在这里插入图片描述

图像层

Matplotlib的图像层用于呈现和交互Matplotlib图像。Matplotlib的图像层指的是在Axes对象中绘制的各种图形元素,例如线图、散点图、柱状图等。

Matplotlib提供了丰富的图形元素来满足不同类型数据的可视化需求。

折线图:通常用于显示随时间、位置或其他连续值变化而变化的一些数据趋势。可以使用plot方法进行绘制。

散点图:用于显示多个变量之间的关系或在多个数据中的分布情况。可以使用scatter方法进行绘制。

柱状图:用于表示一组离散的数据,通常用于比较不同类别或组之间的数量或频率。可以使用bar方法进行绘制。

饼图:通常用于显示数据的相对大小,尤其适用于百分比或部分-整体关系。可以使用pie方法进行绘制。

直方图:用于表示连续变量的分布情况,显示变量的频率分布情况。可以使用hist方法进行绘制。

Matplotlib的绘图配置

Matplotlib文档:https://matplotlib.org/stable/tutorials/index.html

在这里插入图片描述

设置画布属性

属性示例
设置画布大小plt.figure(figsize=(8,6))
设置画布标题plt.title(“My Title”)
设置横轴和纵轴标签plt.xlabel(“X Label”)
plt.ylabel(“Y Label”)
设置坐标轴刻度范围plt.xlim(0, 10) # 横轴
plt.ylim(0, 20) # 纵轴
设置坐标轴刻度plt.xticks(range(0, 11, 2)) # 横轴刻度范围为 0 到 10,步长为 2
plt.yticks(range(0, 21, 5)) # 纵轴刻度范围为 0 到 20,步长为 5
设置坐标轴显示和隐藏plt.axis(‘on’) # 显示坐标轴
plt.axis(‘off’) # 隐藏坐标轴
设置图例plt.legend([‘line1’, ‘line2’]) # 图例文本为 ‘line1’ 和 ‘line2’
设置网格线plt.grid(True) # 显示网格线
plt.grid(False) # 隐藏网格线
设置图像清晰度plt.figure(dpi=80) 默认是 dpi=100
设置文本注释plt.text(3,8, ‘坐标(3,8)’)
设置图例plt.legend([‘图例1’])
# 创建画布,并设置画布属性
plt.figure(figsize=(20, 8), dpi=80)
import matplotlib.pyplot as plt

# 创建画布,并设置画布属性
plt.figure(figsize=(20, 8), dpi=80)

x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
plt.plot(x, y)

# 添加标题
plt.title("价格与销量的变化示意图")

# 添加 x 轴和 y 轴标签
plt.xlabel("价格")
plt.ylabel("销量")

# 添加文本注释
plt.text(3,8, '坐标(3,8)')

plt.show()

在这里插入图片描述

绘图保存

Matplotlib允许用户将图形保存为各种格式的图片,例如 PNG、PDF、SVG 和 EPS。

使用savefig()函数保存当前活动图形。在调用 savefig()函数之前,必须先创建一个图形

格式示例
PNG格式plt.savefig(‘myplot.png’)
PDF格式plt.savefig(‘myplot.pdf’)
SVG格式plt.savefig(‘myplot.svg’)
EPS格式plt.savefig(‘myplot.eps’)
PNG格式
PNG格式
import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4])
# 保存图片到指定路径
plt.savefig('myplot.png', dpi=200)

注意:

1.plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。

2.绘制出大尺寸的图像时可以设置更高的分辨率,从而得到更清晰的输出

自定义x与y刻度

Matplotlib允许用户自定义 x 轴和 y 轴的刻度范围、步长以及标签。使用xticks和yticks方法来自定义X轴和Y轴的刻度值和文本

属性示例
设置刻度范围plt.xlim(0, 10) # x 轴范围为 0 到 10
plt.ylim(0, 20) # y 轴范围为 0 到 20
设置刻度步长plt.xticks(range(0, 11, 2)) # x 轴刻度范围为 0 到 10,步长为 2
plt.yticks(range(0, 21, 5)) # y 轴刻度范围为 0 到 20,步长为 5
自定义刻度标签plt.xticks([1, 2, 3], [‘One’, ‘Two’, ‘Three’]) # 自定义 x 轴刻度标签
plt.yticks([-1, 0, 1], [‘Low’, ‘Mid’, ‘High’]) # 自定义 y 轴刻度标签
对数刻度plt.xscale(‘log’) # 使用对数刻度绘制 x 轴
plt.yscale(‘log’) # 使用对数刻度绘制 y 轴
# xticks方法第一个参数指定要更改的刻度位置,第二个参数指定更改后的刻度文本
plt.xticks(x, **kwargs)

# yticks方法的参数和xticks类似
plt.yticks(y, **kwargs)
# 导入matplotlib
import matplotlib.pyplot as plt

# 创建画布 figsize:画布大小 dpi:像素密度
plt.figure(figsize=(10,5), dpi=100)

# 绘制图像
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 4, 6]
plt.plot(x, y)

# 构造x轴刻度标签
x_ticks_label = ["{}组".format(i) for i in x]

# 构造y轴刻度
y_ticks = range(10)

# 修改x,y轴坐标的刻度显示
# 将X轴刻度从[1, 2, 3, 4, 5]更改为['1组', '2组', '3组', '4组', '5组']
plt.xticks(x, x_ticks_label)
# 将y轴刻度位置从[2, 4, 6, 4, 6]更改为[0,1,2...9]
plt.yticks(y_ticks)

# 显示图像
plt.show()

在这里插入图片描述

解决中文显示异常

1.下载 SimHei 字体

https://www.zitijia.com/i/281258939050380345.html

2.安装字体

a.Linux:拷贝字体到 usr/share/fonts 下

sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf

b.windows和mac下:双击安装

3.删除缓存文件

a.Linux

cd ~/.matplotlib
rm -r *

b.windows

C:\Users\用户名\.matplotlib

4.修改配置文件matplotlibrc
a.Linux

vi ~/.matplotlib/matplotlibrc

b.windows

C:\Users\用户名\.matplotlib\matplotlibrc

将文件内容修改为:

font.family         : sans-serif
font.sans-serif         : SimHei
axes.unicode_minus  : False

5.重启Jupyter Notebook

jupyter notebook

在这里插入图片描述

网格显示

Matplotlib 可以通过 grid() 方法控制网格线的显示方式,以增强图像的易读性和美观性。

属性示例
显示网格plt.grid(True) # 显示网格线
隐藏网格plt.grid(False) # 隐藏网格线
自定义网格样式plt.grid(True, linestyle=‘–’, linewidth=0.5, color=‘gray’) # 设置网格为虚线,线宽为 0.5,颜色为灰色
仅显示垂直或水平网格plt.grid(axis=‘x’) # 仅显示垂直网格
plt.grid(axis=‘y’) # 仅显示水平网格
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

plt.plot(x, y)

# 添加的网格线样式为虚线,线宽为0.5,颜色为灰色
plt.grid(True, linestyle='--', linewidth=0.5, color='gray')

plt.show()

在这里插入图片描述

多次plot

使用多个plot()函数调用来绘制多条曲线,它们将会出现在同一个图表上。

import matplotlib.pyplot as plt

# 创建数据
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

x2 = [1, 2, 3, 4, 5]
y2 = [2, 4, 6, 4, 6]


# 绘制图表
plt.plot(x, y, label="一部")
plt.plot(x2, y2, label="二部")

# 添加标签和标题
plt.xlabel('价格')
plt.ylabel('销量')
plt.title("价格与销量的变化示意图")

# 添加图例
plt.legend()

# 显示图表
plt.show()

在这里插入图片描述

绘图标记

点(Markers)

可以使用不同的符号来表示数据点

标记描述
“.”
“,”像素点
“o”实心圆
“v”下三角
“^”上三角
“<”左三角
“>”右三角
“1”下三叉
“2”上三叉
“3”左三叉
“4”右三叉
“8”八角形
“s”正方形
“p”五边形
“P”加号(填充)
“*”星号
“h”六边形 1
“H”六边形 2
“+”加号
“x”乘号 x
“X”乘号 x (填充)
“D”菱形
“d”瘦菱形
""
“_”横线
0左横线
1右横线
2上竖线
3下竖线
4左箭头
5右箭头
6上箭头
7下箭头
8左箭头 (中间点为基准)
9右箭头 (中间点为基准)
10上箭头 (中间点为基准)
11下箭头 (中间点为基准)
“None”, " " or “”没有任何标记
. . . ... ...渲染指定的字符。例如 “ f f f” 以字母 f 为标记。

线型(Linestyles)

线条的样式可以通过不同的线型来表示

线类型标记描述
-实线
--虚线
-.点划线
:点虚线

颜色(Colors)

可以使用不同的颜色来标记数据点或线条

颜色标记描述
r红色
g绿色
b蓝色
c青色
m品红
y黄色
k'黑色
w白色
import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [1, 4, 2, 3]

plt.plot(x, y, linestyle="-.", marker="o", color='g')
plt.title('My Chart')
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.legend(['Data'])
plt.show()

在这里插入图片描述

显示图例

如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出

一定要在plt.plot()里面设置一个label,否则不显示图例

图例显示位置可选参数:

字符串数字
‘best’0
‘upper right’1
‘upper left’2
‘lower left’3
‘lower right’4
‘right’5
‘center left’6
‘center right’7
‘lower center’8
‘upper center’9
‘center’10
import matplotlib.pyplot as plt

x1 = [1, 2, 3]
y1 = [4, 5, 6]

x2 = [4, 5, 6]
y2 = [1, 3, 5]

# 绘制折线图
plt.plot(x1, y1, label='Line 1')
# 使用多次plot可以画多个折线
plt.plot(x2, y2, label='Line 2', color='r', linestyle='--')


# 显示图例
plt.legend(loc="best")
# plt.legend(loc=2)

plt.show()

在这里插入图片描述

多个坐标系显示

Matplotlib可以通过 subplot 函数来添加多个坐标系。

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.array(['A', 'B', 'C', 'D', 'E'])
y1 = np.array([3, 8, 1, 10, 5])
y2 = np.array([4, 6, 12, 2, 9])

# 创建画板和坐标系
# plt.figure(figsize=(20, 8), dpi=100)
# 创建一个包含 1 行、2 列的子图,返回一个由画板和两个坐标系组成的元组。将这个元组拆分为 fig、axis1 和 axis2 三个变量
fig, (axis1, axis2) = plt.subplots(nrows=1, ncols=2,  figsize=(20, 8), dpi=100)
# fig, axes = plt.subplots(nrows=1, ncols=2,  figsize=(20, 8), dpi=100)

# 在第一个坐标系中显示第一个数据集的折线图
axis1.plot(x, y1, label="图1", linestyle="--", color="r")
axis1.set_title('Dataset 1')
# axes[0].plot(x, y1, label="图1", linestyle="--", color="r")
# axes[1].bar(x, y2, label="图2")

# 在第二个坐标系中显示第二个数据集的条形图
axis2.bar(x, y2, label="图2")
axis2.set_title('Dataset 2')

# 添加x,y轴刻度
x_ticks_label = ["{}组".format(i) for i in x]
y_ticks = range(15)
axis1.set_xticks(x,x_ticks_label)
axis1.set_yticks(y_ticks)

# 添加网格显示
axis1.grid(True, linestyle="--", alpha=0.5)

# 添加x,y轴描述和标题
axis1.set_xlabel("分组")
axis1.set_ylabel("数量")
axis1.set_title("分组与数量间的示意图", fontsize=25)

# 显示图例
axis1.legend(loc=0)
axis2.legend(loc=0)

# 显示图像
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线安装QT5.15.2+VS2019-16.11.26

在线安装QT5.15.2VS2019-16.11.26 一、安装QT5 官方下载&#xff1a; https://download.qt.io/archive/online_installers/4.5/ 选择【qt-unified-windows-x64-4.5.2-online.exe】 登录账户 需要提前注册&#xff0c;过程省略。 安装位置&#xff08;自定义&#xff09; …

GitHub Repo

GitHub Repo 之前笔记写了 git 和 gitup&#xff08;pullpush&#xff09;&#xff0c;这里记一下 giehub repo 二三事。 权限 我不是很确定 github 的企业版是什么样的&#xff0c;不过我们用的是 gitlab 的企业版&#xff0c;这个是需要通过 vpn 才能连接的&#xff0c;如…

【C语言】基础语法6:字符串和字符处理

上一篇&#xff1a;数组和指针 下一篇&#xff1a;文件操作 ❤️‍&#x1f525;前情提要❤️‍&#x1f525;   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图&#xff08;结束换链接&#xff09;并免费提供给大家学习&#xff0c;希望大家纠错…

redis7 安装 与 启动

文章目录 1. redis 的 概述2. redis 的 安装3. redis 的启动4. redis 的卸载 1. redis 的 概述 redis : 是 远程 词典服务器 &#xff0c;是 一个基于内存的 键值型 Nosql 数据库. 官方解释 : Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写…

QMS-云质说质量 - 6 中小企业常用的结构化问题解决方法有哪些?

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 引言 爱因斯坦如何解决问题 面对问题时&#xff0c;有的人可能很盲目地开始行动&#xff0c;干到一定程度&#xff0c;却突然发现自己所做的是无用功。 有人问过科学巨匠爱因斯坦&#xff0c;如果给他一个关系到他生命的问…

R基础函数概览(一)

rep 函数形式&#xff1a;rep(x, time , length , each ,) 参数说明&#xff1a; x&#xff1a;代表的是你要进行复制的对象&#xff0c;可以是一个向量或者是一个因子。 times&#xff1a;代表的是复制的次数&#xff0c;只能为正数。负数以及NA值都会为错误值。复制是指的…

[oeasy]python0139_尝试捕获异常_ try_except_traceback

尝试捕获异常 回忆上次内容 变量相加 整型数字变量可以相加字符串变量也可以拼接 但是 字符串 和 整型数字整型数字 和 字符串不能相加 怎么办&#xff1f; 转格式int(“1”)str(2) 可是 如果输入的苹果数量是 字符串"abc" int(“abc”)会发生什么&#xff1f;&…

通信算法之149:EVM测量

1.星座图 h scatterplot(sqrt(sps)*txSig(sps*span1:end-sps*span),sps,offset); hold on scatterplot(rxSigFilt(span1:end-span),n,offset,bx,h) scatterplot(dataMod,n,offset,r,h) legend(Transmit Signal,Received Signal,Ideal,location,best) 2. 眼图 Eye Diagram D…

华为OD机试真题(Java),简单密码(100%通过+复盘思路)

一、题目描述 现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应&#xff1a; 1--1&#xff0c; abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0&#xff0c;把密码中出现的小写字母都变成九键键盘对应的数字&#xff0c;如&#xff1a;a …

C++ -4- 类和对象(下)

文章目录 1.初始化列表什么是初始化列表&#xff1f;初始化列表的 意义及使用 2.explicit关键字单参数构造函数&#xff08;C98&#xff09;多参数的构造函数&#xff08;C11&#xff09;&#xff08;了解&#xff09; 3.static静态成员静态成员变量与静态成员函数静态成员变量…

Java并发(三)----创建线程的三种方式及查看进程线程

一、直接使用 Thread // 创建线程对象 Thread t new Thread() {public void run() {// 要执行的任务} }; // 启动线程 t.start(); 例如&#xff1a; // 构造方法的参数是给线程指定名字&#xff0c;推荐 Thread t1 new Thread("t1") {Override// run 方法内实现…

Codeforces Round 864 (Div. 2)(A~D)

A. Li Hua and Maze 给出两个不相邻的点&#xff0c;最少需要堵上几个方格&#xff0c;才能使得两个方格之间不能互相到达。 思路&#xff1a;显然&#xff0c;对于不邻任何边界的方格来说&#xff0c;最少需要的是4&#xff0c;即上下左右都堵上&#xff1b;邻一个边界就-1&a…

Python樱花树

文章目录 前言一、Turtle基础1.1 Turtle画板1.2 Turtle画笔1.3 Turtle画图1.4 Turtle填色1.5 Turtle写字 二、Python樱花树2.1 樱花类2.2 樱花树2.3 主函数2.4 程序分析2.5 樱花林 尾声 前言 粉色系最爱&#xff01;Python樱花树等你获取~ 哈喽小伙伴们好久不见啦&#xff0c;…

几何感知Transformer用于3D原子系统建模

基于机器学习的方法在预测分子能量和性质方面表现出很强的能力。分子能量至少与原子、键、键角、扭转角和非键原子对有关。以前的Transformer模型只使用原子作为输入&#xff0c;缺乏对上述因素的显式建模。为了减轻这种限制&#xff0c;作者提出了Moleformer&#xff0c;这是一…

ChatGPT课程送账号啦,让你成为新生代AI程序员

ChatGPT能帮助程序员 解决哪些具体问题&#xff1f; 程序员在日常工作中可能会遇到各种各样的问题&#xff0c;如语法错误、逻辑问题、性能问题等等。 不同业务场景的问题&#xff0c;都可以利用ChatGPT获取各自场景下的知识&#xff0c;并使用ChatGPT提供的代码示例和问题解…

S32K3系列单片学习LPSPI是什么

前言 通过前面的学习&#xff0c;已经可以实现最基础的引脚配置功能了&#xff0c;并实现了点亮LED的程序。下面将记录一下&#xff0c;S32K3的SPI模块的配置方法&#xff0c;以及注意事项。 一、LPSPI介绍 **LPSPI:LOW POWER Serial Peripheral Interface**1.概述 所有LPS…

Unity3d数字化看板-多关节机器人运动控制

特殊&#xff1a;机器人多关节跟随运动 机械手运动控制主要是关节的旋转&#xff0c;通过控制多个关节的角度&#xff0c;实现对机械手的同步控制 机械手运动控制&#xff0c;可以分解为多个关节的运动&#xff0c;下一关节是跟随在上一关节运动&#xff0c;在处理模型的时候…

小案例CSS

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content"widthde…

一个基于 go 实现的轻量级任务调度框架

github 地址&#xff1a;GitHub - memory-overflow/light-task-scheduler: 一个go语言的轻量级的快速实现任务调度的框架&#xff0c;并且支持有状态任务的持久化&#xff0c;并发控制和超时控制。 框架的设计思想和背景 业务后台开发&#xff0c;经常会遇到很多并发低&#…

QT笔记——属性栏之QtPropertyBrowser下载配置

我们常常看到Qt Designer如下图&#xff0c;属性栏 环境&#xff1a;vs2019 qt 5.12.2 QtPropertyBrowser 下面我将介绍如何去下载和安装配置 QtPropertyBrowser&#xff0c;使用的是.dll和.lib 第一种方式&#xff1a;编译qt4 源码的方式 然后修改为qt5 的形式 第一步&am…