本篇文章主要是分享matplotlib折线图、散点图、误差图、轮廓图、柱状图、饼图、面积图、直方图、雷达图、热力图、词云图、箱型图多子图绘制过程的方法和注意要点
导入十二个子图所需的模块库
matplotlib用于绘制图形
import matplotlib.pylot as plt #安装模块库 pip install matplotlib
numpy、random用于生成随机数据
import numpy as np #安装模块库:pip install numpy
import random #系统自带
logging、jieba、wordcloud只用于用于子图11的词云图
import logging #系统自带
import jieba #安装模块库:pip install jieba
from wordcloud import WordCloud #安装模块库:pip install wordcloud
注意:wordcloud若无法顺利安装,请自行查询百度、CSDN安装方式
参考链接:wordcloud安装过程及常见问题汇总
fig,ax = plt.subplots(num='matplotlib 二维图形设计练习',
nrows=3,ncols=4,
figsize=(20,10),dpi=80,
edgecolor=None,
frameon=False
)
ax1,ax2,ax3,ax4,ax5,ax6,ax7,ax8,ax9,ax10,ax11,ax12 = ax.flatten()
plt.subplots() 创建子图表
num 设置画布名称
nrows、ncols 设置横纵向子图数量
figsize、dpi 设置画布大小和分辨率
edgecolor 画布边框颜色
frameon 是否绘制画布图框
参考链接:python 可视化:fig, ax = plt.subplots()画多表图的3中常见样例 & 自定义图表格式
ax.flatten() 设置大小相同的子图
参考链接:plt.subplots中的ax = ax.flatten()
simhei为window自带字体,默认字体文件存放处:C:\Windows\Fonts(如果不一样,可自行百度查找)
matplotlib一共有三种中文显示方式
方式一:把下面的代码放在导入模块后面,
import matplotlib.pyplot as plt
import numpy as np
import random
import logging #只有图11要用
import jieba #只有图11要用
from wordcloud import WordCloud #只有图11要用
#中文显示设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
plt.rcParams['font.size'] = '16' #用于设置中文大小
方式二:在每个需要用到中文的地方,手动设置中文字体
from matplotlib.font_manager import FontProperties
fonts = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=20)
plt.title('标题中文',fontproperties=fonts)
plt.annotate('注释中文',fontproperties=fonts)
plt.legend()...
plt.xticklabel...
plt.yticklabel... 等等
方式三:
执行这串代码然后将simhei.ttf 字体文件放到这里面:\matplotlib\mpl-data\fonts\ttf
import matplotlib
print(matplotlib.get_data_path()) # 数据路径
然后退回到这个地方\matplotlib\mpl-data,打开“matplotlibrc”
Ctrl + R 可以快速定位!!!!
#font.family:
#font.sans-serif:
#axes.unicode_minus:
把这三个地方前面的“#”注释符号去掉,然后改成下面这样
font.family:sans-serif
font.sans-serif:SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
axes.unicode_minus:False,#作用就是解决负号'-'显示为方块的问题
在代码前面加入这个
from matplotlib.font_manager import _rebuild
资料参考链接:
matplotlib中文乱码的两种解决方案
Matplotlib 显示中文
方式二最为麻烦,方式三分享代码时,执行代码的主机也需这样设置,建议采用方式一
图形绘制特点
该图以绘制cos()和sin()两条线说明折线图的线型设置
增加图例、标题、轴名称等辅助说明图形
修改标题位置,X轴位置,隐藏部分边框用于美化图形
添加注释,用于突出图形某个特殊值
设置数据,用于两条线的X轴和Y轴
#设置数据
x1 = np.linspace(0,2 * np.pi,100)
y1 = np.linspace(0,10,20)
折线图的绘制语法:plt.plot()或ax.plot()
plt.plot(x,y,color,linestyle,linewidth,marker,**kw)
#绘制图形
ax1.plot(x1,np.sin(x1),color="b",linestyle='--',label='$sin(x)$')
ax1.plot(x1,np.cos(x1),'r-.',label='$cos(x)$')
color:颜色
linestyle:线型
linewidth:线宽
label:折线名称
marker:线条标记
注意:折线图中的颜色和线型、标记可以简化缩写
设置折线图的X轴、Y轴数值范围
面向过程版:
#设置X、Y轴范围
ax1.set_xlim(0,2*np.pi)
ax1.set_ylim(-1,1)
面向对象版:
#设置X、Y轴范围
plt.xlim(0,2*np.pi)
plt.ylim(-1,1)
np.pi:圆周率“π”的意思
设置图例
#设置图例
ax1.legend(loc=0,frameon=False)
location(loc):图例位置,0代表自动取最佳的位置
frameon:是否绘制图例边框
设置坐标轴刻度值
面向过程版:
#坐标轴刻度
ax1.set_xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi])
面向对象版:
#坐标轴刻度
plt.xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi])
设置坐标轴名称
面向过程版:
#坐标轴名称
ax1.set_ylabel("y_plot")
面向对象版:
#坐标轴名称
plt.ylabel("y_plot")
修改X轴刻度标签
#刻度标签
ax1_np_pi = [' ', r'$\frac{\pi}{2}$', r'$\pi$', r'$\frac{3\pi}{2}$', r'$2\pi$']
ax1.set_xticklabels(ax1_np_pi)
第一个值为“ ”,主要是为了隐藏X轴在Y轴交界处的刻度值
设置折线图边框
#边框设置
ax1.spines['bottom'].set_position(('axes',0.5))
ax1.spines['top'].set_color('none')
ax1.spines['right'].set_color('none')
set_position(('axes'),0.5):将X轴往上移动到Y轴的50%,既平分Y轴
set_color(none"):将需要隐藏的边框颜色设置为“None”,就可以实现隐藏效果
添加标记,突出特殊值
#添加标记
#添加标记点
tx = 3*np.pi/4
ty = np.sin(tx)
ax1.scatter(tx,ty,
s=15,
facecolor='b',
zorder=3
)
#添加标记线
ax1.plot([tx,tx],[0,ty],color='lightgray',linestyle=':')
#添加注释
ax1.annotate(r'$y = sin(\frac{3\pi}{4})$',
xy=(tx,ty),xytext=(tx+1,ty),
arrowprops=dict(facecolor='r',
edgecolor='r',
shrink=0.15,
headwidth=10,
headlength=8,
width=2))
标记点参数解释:
tx、ty:标记点的X轴和Y轴坐标点
ax1.scatter:matplotlib绘制散点的语法,下方有散点图绘制部分详细说明,这里不做解释
s:标记点大小
facecolor:标记点颜色
zorder:标记点边框大小
标记线参数解释:
底层逻辑就是通过绘制一条折线来作为标记线,只是这条折线只有(tx,0),(tx,ty)两个点而已,在通过设置线条颜色和线型来美化标记线
注释参数解释:
r'XXXXXXX':注释内容,可自由设置
xy:注释起始位置
xytext:注释文本位置
arrowprops:设置注释参数
折线图标题
下方有标题部分详细说明,这里不做详细解释
#图形标题
ax1.set_title('折线图(plot)',
fontsize='large',
fontweight='light',
fontstyle='oblique',
loc='right')
fontsize:文字大小
fontweight:文字位置
fontstyle:文字风格
loc:标题位置
完整代码
import matplotlib.pyplot as plt
import numpy as np
#中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
#设置画布
fig = plt.figure(figsize=(10,5),dpi=60)
ax1 = fig.add_subplot(111)
#折线图
#设置数据
x1 = np.linspace(0,2 * np.pi,100)
y1 = np.linspace(0,10,20)
#绘制图形
ax1.plot(x1,np.sin(x1),color="b",linestyle='--',label='$sin(x)$')
ax1.plot(x1,np.cos(x1),'r-.',label='$cos(x)$')
#设置X、Y轴范围
ax1.set_xlim(0,2*np.pi)
ax1.set_ylim(-1,1)
#设置图例
ax1.legend(loc=0,frameon=False)
#坐标轴刻度
ax1.set_xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi])
#坐标轴名称
ax1.set_ylabel("y_plot")
#刻度标签
ax1_np_pi = [' ', r'$\frac{\pi}{2}$', r'$\pi$', r'$\frac{3\pi}{2}$', r'$2\pi$']
ax1.set_xticklabels(ax1_np_pi)
#边框设置
ax1.spines['bottom'].set_position(('axes',0.5))
ax1.spines['top'].set_color('none')
ax1.spines['right'].set_color('none')
#添加标记
#添加标记点
tx = 3*np.pi/4
ty = np.sin(tx)
ax1.scatter(tx,ty,
s=15,
facecolor='b',
zorder=3
)
#添加标记线
ax1.plot([tx,tx],[0,ty],color='lightgray',linestyle=':')
#添加注释
ax1.annotate(r'$y = sin(\frac{3\pi}{4})$',
xy=(tx,ty),xytext=(tx+1,ty),
arrowprops=dict(facecolor='r',
edgecolor='r',
shrink=0.15,
headwidth=10,
headlength=8,
width=2))
#图形标题
ax1.set_title('折线图(plot)',
fontsize='large',
fontweight='light',
fontstyle='oblique',
loc='right')
plt.show()
参考资料:详见文末
图形绘制特点
图一的气泡图也是散点图的一种,只是通过气泡大小以及不同的颜色来区分散点
图二使用不同的标记(marker)和颜色来区分不同样本的离散程度
图三是典型的散点图绘制
隐藏边框和坐标轴用于美化图形
更换标题颜色主要是突出标题可个性化设置
图形绘制底层原理一致,本篇章主讲气泡图的绘制
生成随机数据
#生成随机数据
x2 = np.random.normal(0,1,100)
y2 = np.random.normal(-2,1,100)
每次执行代码,自动生成不同的气泡图
注意:记得需要导入random模块
import random
设置数据的颜色
#设置不同数据的颜色
colors = abs(np.random.rand(100))
np.random.rand():生成符合正态分布的随机样本值
设置散点的大小
#设置散点的大小随数据而变化
size = 150 * abs(np.random.randn(100))
np.random.randn():生产符合正态分布的随机浮点数
散点图的绘制语法:plt.scatter或ax.scatter
plt.scatter(x,y,size,color,alpha,**kw)
#散点图1
ax2.scatter(x2,y2,s=size,c=colors,alpha=0.7)
s,c皆为size、color的简写
alpha:透明度
隐藏刻度值和刻度标签
面向过程版
#隐藏X轴刻度值和刻度标签
ax2.set_xticks([])
#隐藏Y轴刻度值和刻度标签
ax2.set_yticks([])
面向对象版
#隐藏X轴刻度值和刻度标签
plt.xticks([])
#隐藏Y轴刻度值和刻度标签
plt.yticks([])
隐藏边线
通过for循环隐藏上面、右边、下面、左边的边框
#隐藏边线
for i in ['top', 'right', 'bottom', 'left']:
ax2.spines[i].set_visible(False)
也可以隐藏部分边框,就像这样!
ax2.spines['top'].set_color('none')
ax2.spines['right'].set_color('none')
ax2.spines['bottom'].set_color('none')
ax2.spines['left'].set_color('none')
设置散点图标题
#设置标题
ax2.set_title('散点图(scatter)',
fontsize='x-large',
fontweight='light',
c='r')
fontsize:文本大小
fontweight:文本位置
color:标题颜色
完整代码
import matplotlib.pyplot as plt
import numpy as np
import random
#中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
#设置画布
fig = plt.figure(figsize=(8,5),dpi=60)
ax2 = fig.add_subplot(111)
#散点图
#生成随机数据
x2 = np.random.normal(0,1,100)
y2 = np.random.normal(-2,1,100)
#设置不同数据的颜色
colors = abs(np.random.rand(100))
#设置散点的大小随数据而变化
size = 150 * np.random.randn(100)
#散点图1
ax2.scatter(x2,y2,s=size,c=colors,alpha=0.7)
#隐藏X轴刻度值和刻度标签
ax2.set_xticks([])
#隐藏Y轴刻度值和刻度标签
ax2.set_yticks([])
#隐藏边线
for i in ['top', 'right', 'bottom', 'left']:
ax2.spines[i].set_visible(False)
#设置标题
ax2.set_title('散点图(scatter)',
fontsize='x-large',
fontweight='light',
c='r')
plt.show()
参考资料:详见文末
图形绘制特点
除了美观,也没啥特点了.....(其实也不美观哈哈哈)
误差图的绘制语法:plt.errorbar或ax.errorbar
plt.errorbar(x,y,xerr,yerrr,ecolor,elinewidth,capsize,fmt,ms,mfc,mec,**kw)
ax3.errorbar(range(20),np.random.random(20),
yerr=0.2,
fmt='ok',
ms=7,
ecolor='lightgray',
elinewidth=3,
capsize=5,
capthick=3
)
xerr,yerr:X轴、Y轴误差范围
ecolor:误差线颜色
elinewidth:误差线大小
capsize:误差横杠大小
capthick:误差横杠厚度
fmt:误差点形状
ms:误差点大小
mfc:误差点颜色
mes:误差线边框颜色
设置坐标轴
#设置X轴范围
ax3.set_xlim(-1,21)
#将X轴移动到顶部
ax3.xaxis.set_ticks_position('top')
设置轴刻度值
#设置X轴刻度值
ax3.set_xticks([i for i in range(0,21,4)])
#隐藏Y轴刻度值和刻度标签
ax3.set_yticks([])
隐藏边框
#去掉边框
for i in ['top', 'right', 'bottom', 'left']:
ax3.spines[i].set_color('none')
设置标题
#设置标题
ax3.set_title('误差图(errorbar)')
设置网格
#设置网格
ax3.grid(axis='x',linestyle='-.')
这里只设置了X轴的网格和网格线条类型
完整代码
import matplotlib.pyplot as plt
import numpy as np
import random
#中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
#设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax3 = fig.add_subplot(111)
#误差图
ax3.errorbar(range(20),np.random.random(20),
yerr=0.2,
fmt='ok',
ms=7,
ecolor='lightgray',
elinewidth=3,
capsize=5,
capthick=3
)
#设置X轴范围
ax3.set_xlim(-1,21)
#将X轴移动到顶部
ax3.xaxis.set_ticks_position('top')
#设置X轴刻度值
ax3.set_xticks([i for i in range(0,21,4)])
#隐藏Y轴刻度值和刻度标签
ax3.set_yticks([])
#去掉边框
for i in ['top', 'right', 'bottom', 'left']:
ax3.spines[i].set_color('none')
#设置标题
ax3.set_title('误差图(errorbar)')
#设置网格
ax3.grid(axis='x',linestyle='-.')
plt.show()
参考资料,详见文末
设置X轴Y轴Z轴数据
#设置数据范围
x4 = np.linspace(-10,10,100)
y4 = np.linspace(-10,10,100)
X,Y = np.meshgrid(x4,y4)
Z = np.sin(X) ** 100 + np.cos(10 + Y) + np.sqrt(X**2 + Y**2)
np.linspace():生成等距样本值
绘制轮廓图语法:plt.contour或ax.contour
plt.contour(x,y,z,**kw)
#绘制图形
clabel_ax4 = ax4.contour(X,Y,Z,7)
cc = ax4.imshow(Z,extent=[-10,10,-10,10],origin='lower',alpha=0.5)
ax4.clabel(clabel_ax4,fontsize=8)
7:轮廓线数
extent:轮廓值范围
origin:坐标轴起始位置(默认左上角)
alpha:轮廓图透明度
fontsiZe:
设置刻度值范围
#设置刻度值范围
ax4.set_xticks([i for i in range(-10,11,5)])
ax4.set_yticks([i for i in range(-10,11,5)])
用for循环生成-10~10的等距刻度值
设置标题
#设置标题
ax4.set_title('轮廓图(contour)',
bbox=dict(boxstyle='round,pad=0.5',fc='w',ec='k',lw=1,alpha=0.5))
设置轮廓图颜色条
#设置颜色条
fig.colorbar(colorbar_ax4,ax=ax4)
完整代码
import matplotlib.pyplot as plt
import numpy as np
#中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
#设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax4 = fig.add_subplot(111)
#轮廓图1
#设置数据范围
x4 = np.linspace(-10,10,100)
y4 = np.linspace(-10,10,100)
X,Y = np.meshgrid(x4,y4)
Z = np.sin(X) ** 100 + np.cos(10 + Y) + np.sqrt(X**2 + Y**2)
#绘制图形
clabel_ax4 = ax4.contour(X,Y,Z,7)
cc = ax4.imshow(Z,extent=[-10,10,-10,10],origin='lower',alpha=0.5)
ax4.clabel(clabel_ax4,fontsize=8)
#设置刻度值范围
ax4.set_xticks([i for i in range(-10,11,5)])
ax4.set_yticks([i for i in range(-10,11,5)])
#设置标题
ax4.set_title('轮廓图(contour)',
bbox=dict(boxstyle='round,pad=0.5',fc='w',ec='k',lw=1,alpha=0.5))
#设置颜色条
fig.colorbar(cc,ax=ax4)
plt.show()
参考资料:
Matplotlib轮廓图 -Matplotlib教程™
matplot画轮廓图_jiuweideqixu的博客-CSDN博客
Python密度和轮廓图绘制--Matplotlib详解_查数菇乐园-CSDN博客_python 轮廓图
matplotlib 合理设置colorbar和子图的对应关系_fzl的博客-CSDN博客
python matplotlib自定义colorbar颜色条-以及matplotlib中的内置色条_留下的,留不下的-CSDN博客
图形绘制特点
柱形图从方向区分为分垂直方向和水平方向;从图形区分堆积柱形图和簇状柱形图
本篇文章主要讲述一般常用的簇状柱形图的绘制过程
通过调整边框、刻度标签、图例来美化图形
设置生成随机数据
#设置数据
r = np.random.randint(0,50,8)
x5 = np.array([1,2,3,4])
y5 = np.array([r[0],r[1],r[2],r[3]])
z5 = np.array([r[4],r[5],r[6],r[7]])
ax5_list = ['A','B','C','D']
width = 0.4
r:生成等距样本值
X5:X轴坐标
y5、z5:Y轴坐标
ax5_list:刻度标签
width:柱子宽度
柱形图的绘制语法:plt.bar或ax.bar
plt.bar(x,y,height,width,align,color,edgecolor,**kw)
#簇状柱形图
ax5.bar(x5,y5,width=width,color='r',label='bar1',alpha=0.6)
ax5.bar(x5+width,z5,width=width,color='g',label='bar2',alpha=0.6)
x,y:X轴Y轴坐标
height:柱子高度
width:柱子宽度
color:柱子颜色
edgecolor:柱子边缘颜色
设置柱子显示数值
#设置数据标签
for a,b in zip(x5,y5):
ax5.text(a,b,b,ha='center',va='bottom',fontsize=12)
for a,b in zip(x5+width,z5):
ax5.text(a,b,b,ha='center',va='bottom',fontsize=12)
x5+width:簇状柱形图,去掉width就变成了堆积柱形图(同X轴不同Y轴)
设置轴范围
#设置轴范围
ax5.set_ylim(0,60)
ax5.set_xlim(0,5)
设置刻度范围
#设置刻度范围
t_list = []
for t in range(1,5):
t_list.append(t+width/2)
ax5.set_xticks(t_list)
t+width/2:把刻度值设置在两个柱子中间
ax5.set_xticks:设置X轴范围
设置刻度标签
#设置刻度标签
ax5.set_xticklabels(ax5_list,rotation=40)
rotation=40:旋转40°
设置图形标题
#设置标题
ax5.set_title('簇状柱形图(bar)')
设置图例
#设置图例
ax5.legend()
隐藏部分边框
#隐藏部分边框
ax5.spines['top'].set_color('none')
ax5.spines['right'].set_color('none')
完整代码
import matplotlib.pyplot as plt
import numpy as np
#中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
#设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax5 = fig.add_subplot(111)
#柱形图
#设置数据
x5 = np.array([1,2,3,4])
r = np.random.randint(0,50,8)
y5 = np.array([r[0],r[1],r[2],r[3]])
z5 = np.array([r[4],r[5],r[6],r[7]])
ax5_list = ['A','B','C','D']
width = 0.4
#簇状柱形图
ax5.bar(x5,y5,width=width,color='r',label='bar1',alpha=0.6)
ax5.bar(x5+width,z5,width=width,color='g',label='bar2',alpha=0.6)
#设置数据标签
for a,b in zip(x5,y5):
ax5.text(a,b,b,ha='center',va='bottom',fontsize=12)
for a,b in zip(x5+width,z5):
ax5.text(a,b,b,ha='center',va='bottom',fontsize=12)
#设置轴范围
ax5.set_ylim(0,60)
ax5.set_xlim(0,5)
#设置刻度范围
t_list = []
for t in range(1,5):
t_list.append(t+width/2)
ax5.set_xticks(t_list)
#设置刻度标签
ax5.set_xticklabels(ax5_list,rotation=40)
#设置标题
ax5.set_title('簇状柱形图(bar)')
plt.show()
参考资料:详见文末
图形绘制特点
个性化标题
自由设置突出部分饼片
圆环图也是饼图的一种,本篇主讲圆环图的绘制逻辑
饼图的绘制语法:plt.pie或ax.pie
#绘制饼图1
ax6.pie(size,explode=(0,0,0.08,0),
autopct='%1.1f%%',
startangle=90,
wedgeprops={'lw':5,'width':0.3,'edgecolor':'w'})
plt.pie(x,autopct,explode,pctdistance,shadow,startangle,colors,labeldistance,radius,wedgeprops)
x:占比
autopct:格式化百分比
explode:突出显示
pctdistance:离心值
shadow:阴影
startangle:起始角度
colors:饼片颜色
labeldistance:扇形标签与圆心的距离
radius:饼图的半径大小
wedgeprops:饼图的格式
设置数据
# 设置数据
s = []
for i in range(1,5):
s.append(random.randint(1,100))
s1 = s[0]/sum(s)
s2 = s[1]/sum(s)
s3 = s[2]/sum(s)
s4 = s[3]/sum(s)
size = [s1,s2,s3,s4]
定义标签
# 定义标签
labels = ['pieA','pieB','pieC','pieD']
设置标签
#设置标题
ax6.set_title('饼图(pie)',
bbox=dict(boxstyle='round,pad=0.5',fc='w',ec='k',lw=1,alpha=0.5))
设置图例
# 设置图例
ax6.legend(loc=0,ncol=1,labels=labels,frameon=False)
设置等比例轴
# 设置等比例轴
ax6.axis('equal')
完整代码
import matplotlib.pyplot as plt
import numpy as np
import random
#中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
#设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax6 = fig.add_subplot(111)
# 饼图
# 设置数据
s = []
for i in range(1,5):
s.append(random.randint(1,100))
s1 = s[0]/sum(s)
s2 = s[1]/sum(s)
s3 = s[2]/sum(s)
s4 = s[3]/sum(s)
size = [s1,s2,s3,s4]
# 定义标签
labels = ['pieA','pieB','pieC','pieD']
# 设置标题
ax6.set_title('饼图(pie)',
bbox=dict(boxstyle='round,pad=0.5',fc='w',ec='k',lw=1,alpha=0.5))
# 设置图例
ax6.legend(loc=0,ncol=1,labels=labels,frameon=False)
# 设置等比例轴
ax6.axis('equal')
plt.show()
参考资料:
[python] 基于matplotlib实现圆环图的绘制_You and Me-CSDN博客_matplotlib环形图
Matplotlib饼图注释_超级大洋葱的博客-CSDN博客
设置数据
# 设置数据
labels = ['A','B','C','D','E']
a = []
b = []
c = []
d = []
for i in a,b,c,d:
for j in random.choices(range(1,21),k=5):
i.append(j)
if len(d) == 5:
break
data = [a,b,c,d]
x = range(len(labels))
data = np.array(data)
面积图的绘制语法:plt.stackplot或ax.stackplot
plt.stackplot(x,y,baseline,sym,labels,colors)
# 绘制图形
ax7.stackplot(x,data,baseline='zero',labels=labels,alpha=0.85)
baseline:基线
sym:对称
labels:标签
colors:颜色
设置X轴范围和命名
# 设置X轴
ax7.set_xlim(0,4)
ax7.set_xticks(x)
设置图例
# 设置图例
ax7.legend()
设置标题
# 设置标题
ax7.set_title('面积图')
完整代码
import matplotlib.pyplot as plt
import numpy as np
import random
#中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
#设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax7 = fig.add_subplot(111)
# 面积图
# 设置数据
labels = ['A','B','C','D','E']
a = []
b = []
c = []
d = []
for i in a,b,c,d:
for j in random.choices(range(1,21),k=5):
i.append(j)
if len(d) == 5:
break
data = [a,b,c,d]
x = range(len(labels))
data = np.array(data)
# 绘制图形
ax7.stackplot(x,data,baseline='zero',labels=labels,alpha=0.85)
# 设置X轴
ax7.set_xlim(0,4)
ax7.set_xticks(x)
# 设置图例
ax7.legend()
# 设置标题
ax7.set_title('面积图')
plt.show()
参考资料:
matplotlib之pyplot模块——堆积面积图、主题河流图(stackplot)_mighty13的专栏-CSDN博客
图形绘制特点:
三个直方图分别使用随机样本值生成(指定了范围)
降低透明度,随机重叠部分区域,突出样本值分布范围
隐藏Y轴和部分边框,美化图形
直方图的绘制语法:plt.hist或ax.hist
plt.hist(x,bins,density,alpha,histtype,color,rwidth,orientaition)
# 绘制图形
ax8.hist(np.random.normal(0,1,100),
bins=30,
density=True,
alpha=0.4,
histtype='stepfilled',
label='$hist1$'
)
ax8.hist(np.random.normal(-2,1,100),
bins=30,
density=True,
alpha=0.4,
histtype='stepfilled',
label='$hist2$'
)
ax8.hist(np.random.normal(3,1,100),
bins=30,
density=True,
alpha=0.4,
histtype='stepfilled',
label='$hist3$'
)
np.random.nornal():在一个样本区间范围内指定生成个数
bines:柱子数量
density:概率总和为1
alpha:透明度
histtype:直方图风格
label:直方图名称
设置刻度范围
面对过程版
#设置刻度范围
ax8.set_xticks([-4,-2,0,2,4])
ax8.set_yticks([])
面对对象版
#设置刻度范围
plt.xticks([-4,-2,0,2,4])
plt.yticks([])
ax8.set_yicks([]):隐藏Y轴刻度
设置刻度标签
#设置刻度标签
ax8_list = ['A','B','C','D','E']
ax8.set_xticklabels(ax8_list)
ax8.legend(loc=1,frameon=False)
for i in ['top','left','right']:
ax8.spines[i].set_visible(False)
location(loc):图例位置,0代表自动取最佳的位置
frameon:是否绘制图例边框
spines[].set_visible:隐藏部分边框
设置标题
#设置标题
ax8.set_title('直方图(hist)')
完成代码
import matplotlib.pyplot as plt
import numpy as np
import random
#中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
#设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax8 = fig.add_subplot(111)
# 直方图
# 绘制图形
ax8.hist(np.random.normal(0,1,100),
bins=30,
density=True,
alpha=0.4,
histtype='stepfilled',
label='$hist1$'
)
ax8.hist(np.random.normal(-2,1,100),
bins=30,
density=True,
alpha=0.4,
histtype='stepfilled',
label='$hist2$'
)
ax8.hist(np.random.normal(3,1,100),
bins=30,
density=True,
alpha=0.4,
histtype='stepfilled',
label='$hist3$'
)
#设置刻度范围
ax8.set_xticks([-4,-2,0,2,4])
ax8.set_yticks([])
#设置刻度标签
ax8_list = ['A','B','C','D','E']
ax8.set_xticklabels(ax8_list)
ax8.legend(loc=1,frameon=False)
for i in ['top','left','right']:
ax8.spines[i].set_visible(False)
#设置标题
ax8.set_title('直方图(hist)')
plt.show()
图形绘制特点:
多个雷达图堆叠在一起,以此对比不同对象的各项属性
利用不同的透明度美化图形的填充颜色和边缘颜色
图例的边框增加阴影突出立体感
隐藏图形边框
# 隐藏边框
ax9.set_axis_off()
plt.axis('off'):隐藏所有刻度线和标签
设置数据源
# 设置随机数据源
a = []
b = []
c = []
for i in a,b,c:
for j in random.choices(range(1,6),k=5):
i.append(j)
if len(c) == 5:
break
用for循环为abc三个列表各随机生成五个数
random.choices(range(1,6),k=5):随机在[1,6)中选取一个数,共选取5次
设置极轴刻度标签
# 极轴刻度
labels = ['var1','var2','var3','var4','var5']
轴径
# 轴径
N = len(a)
设置雷达图的角度值
# 设置雷达图的角度值
angles = np.linspace(0,2*np.pi,N,endpoint=False)
np.linspace(0,2*np.pi,N):在(0,2π)范围内随机生成N个数(浮点数)
endpoint:是否等距
闭环
# 封闭雷达图
a = np.concatenate((a,[a[0]]))
b = np.concatenate((b,[b[0]]))
c = np.concatenate((c,[c[0]]))
angles = np.concatenate((angles,[angles[0]]))
labels = np.concatenate((labels,[labels[0]]))
将abc三个对象的数据闭环
将雷达图和刻度标签形成闭环
坐标转换格式
# 设置为极坐标格式
ax9 = fig.add_subplot(111,polar=True)
不转换格式,雷达图将以默认坐标格式显示
绘制abc三个对象的线条
# 绘制折线图
ax9.plot(angles,a,lw=1,linestyle='solid',label='A')
ax9.plot(angles,b,lw=1,linestyle='solid',label='B')
ax9.plot(angles,c,lw=1,linestyle='solid',label='C')
lw:线宽
linestyle:线条风格
label:线条名称
填充abc三个对象的颜色
# 填充颜色
ax9.fill(angles,a,color='b',alpha=0.1)
ax9.fill(angles,b,color='r',alpha=0.1)
ax9.fill(angles,c,color='g',alpha=0.1)
添加极轴标签
# 添加极轴标签
ax9.set_thetagrids(angles*180/np.pi,labels)
设置极轴范围
# 设置极轴范围
ax9.set_ylim(0,5)
设置极轴开始点
# 设置极轴开始点
ax9.set_theta_zero_location('N')
设置极轴方向
# 设置极轴方向
ax9.set_theta_direction(-1) #顺时针:1 逆时针:-1
设置网格线
# 设置网格线
ax9.grid(True)
设置图例
# 设置图例
ax9.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), shadow=True, ncol=3)
loc:图例位置
bbox_to_anchor:边框设置
shadow:阴影
ncol:图例列数
设置标题
# 设置标题
ax9.set_title('雷达图')
完整代码
import matplotlib.pyplot as plt
import numpy as np
import random
# 中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
# 设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax9 = fig.add_subplot(111)
# 雷达图
# 隐藏边框
ax9.set_axis_off()
# 设置随机数据源
a = []
b = []
c = []
for i in a,b,c:
for j in random.choices(range(1,6),k=5):
i.append(j)
if len(c) == 5:
break
# 极轴刻度标签
labels = ['var1','var2','var3','var4','var5']
# labels.append(labels[0]) #要么这里闭合,要么下面闭合
# 轴径
N = len(a)
# 设置雷达图的角度值
angles = np.linspace(0,2*np.pi,N,endpoint=False)
# 封闭雷达图
a = np.concatenate((a,[a[0]]))
b = np.concatenate((b,[b[0]]))
c = np.concatenate((c,[c[0]]))
angles = np.concatenate((angles,[angles[0]]))
labels = np.concatenate((labels,[labels[0]])) #要么这里闭合,要么上面闭合
# 设置为极坐标格式
ax9 = fig.add_subplot(111,polar=True)
# 绘制折线图
ax9.plot(angles,a,lw=1,linestyle='solid',label='A')
ax9.plot(angles,b,lw=1,linestyle='solid',label='B')
ax9.plot(angles,c,lw=1,linestyle='solid',label='C')
# 填充颜色
ax9.fill(angles,a,color='b',alpha=0.1)
ax9.fill(angles,b,color='r',alpha=0.1)
ax9.fill(angles,c,color='g',alpha=0.1)
# 添加极轴标签
ax9.set_thetagrids(angles*180/np.pi,labels)
# 设置极轴范围
ax9.set_ylim(0,5)
# 设置极轴开始点
ax9.set_theta_zero_location('N')
# 设置极轴方向
ax9.set_theta_direction(-1) #顺时针:1 逆时针:-1
# 设置网格线
ax9.grid(True)
# 设置图例
ax9.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), shadow=True, ncol=3)
# 设置标题
ax9.set_title('雷达图')
plt.show()
参考资料:详见文末
设置数据源
# 设置数据源
x10 = np.random.rand(4,4)
绘制图形
# 绘制图形
colorbar_10 = ax10.imshow(x10, cmap=plt.cm.hot, vmin=0, vmax=1)
fig.colorbar(colorbar_10,ax=ax10,extend='both')
imshow:显示图像
cmap:色彩
vmin、vmax:颜色最值范围
extend:色彩颜色
ax:图像位置
设置标题
# 设置标题
ax10.set_title('热力图')
完整代码
import matplotlib.pyplot as plt
import numpy as np
import random
# 中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
# 设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax10 = fig.add_subplot(111)
# 热力图
# 设置数据源
x10 = np.random.rand(4,4)
# 绘制图形
colorbar_10 = ax10.imshow(x10,cmap=plt.cm.hot,vmin=0,vmax=1)
fig.colorbar(colorbar_10,ax=ax10,extend='both')
# 设置标题
ax10.set_title('热力图')
plt.tight_layout()
plt.show()
参考资料:
一、python可视化——热力图_Nicole的博客-CSDN博客_python 热力图
图像绘制特点:
大部分教程都是使用导入本地文件的方法来运行,这可能不太适合刚接触的同学,所以我直接设置词组来展示词云图的效果
设置词组
# 设置词组(歌曲:我怀念的)
text = '我怀念的是无言感动,我怀念的是绝对炽热,我怀念的是你很激动求我原谅抱得我都痛'
分词
# 使用全模式分词
tp = jieba.cut(text,cut_all=True)
记得导入jieba库
import jieba # 安装库:pip install jieba
如果你的文本有很多空格或者标点符号,则需要先做数据清洗,具体例子参考百度
合并词组
# 合并词组
tp = ','.join(tp)
分词后,需要用一个符号来重新合并文本,否则会报错显示只有一个词组
jion():python内置合并函数
生成词云
# 生成云词
wc = WordCloud(font_path=r'.\simhei.ttf',background_color='white').generate(tp)
font_path:字体位置(请翻到最上面重新看字体部分)
background_color:背景颜色
注意语法的大小写
记得导入相关库
from wordcloud import WordCloud
这个库的安装比较容易失败,建议百度查询安装方式
隐藏边框和刻度
# 隐藏所有边框和刻度
ax11.axis('off')
显示图像
# 显示图像
ax11.imshow(wc)
设置标题
# 设置标题
ax11.set_title('词云图')
完整代码
import matplotlib.pyplot as plt
import numpy as np
import random
import logging
import jieba
from wordcloud import WordCloud
# 中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
# 设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax11 = fig.add_subplot(111)
# 词云图
jieba.setLogLevel(logging.INFO)
# 设置词组(歌曲:我怀念的)
text = '我怀念的是无言感动,我怀念的是绝对炽热,我怀念的是你很激动求我原谅抱得我都痛'
# 使用全模式分词
tp = jieba.cut(text,cut_all=True)
# 合并词组
tp = ','.join(tp)
# 生成云词
wc = WordCloud(font_path=r'.\simhei.ttf',background_color='white').generate(tp)
# 隐藏所有边框和刻度
ax11.axis('off')
# 显示图像
ax11.imshow(wc)
# 设置标题
ax11.set_title('词云图')
plt.tight_layout()
plt.show()
参考资料:
python :jieba库的使用大全_总裁余(余登武)博客-CSDN博客_pythonjieba库的使用
【学习笔记】wordCloud的基本使用_寸先生的AI道路-CSDN博客
详细介绍使用wordCloud设计词云_修炼之路-CSDN博客
怎么用Python画出好看的词云图?_数据森麟-CSDN博客
图像绘制特点
利用三个不同的样式作为设置对比,可以自由设置箱型图的宽度、误差线、颜色、中位线等等
设置数据
# 设置数据
data =[np.random.normal(0,i,100) for i in range(1,4)]
随机生成三个样本
np.random.normal():随机生成正态分布
绘制图形
# 绘制图形
boxs = ax12.boxplot(data,patch_artist=True,
vert=True,widths=[0.2,0.4,0.3])
箱型图的绘制语法:plt.boxplot或ax.boxplot
plt.boxplot(data,patch_artist,vert,widths,sym)
data:数据
pathc_artist:填充箱体颜色
vert:箱体显示方向;True垂直摆放,False水平摆放
widths:箱体宽度
sym:指定异常点的形状
设置颜色
# 设置颜色
colors = ['pink', 'lightblue', 'lightgreen']
for patch,color in zip(boxs['boxes'],colors):
patch.set_facecolor(color)
zip:python内置函数
boxs['boxes']:箱体在箱型图中国的位置
设置刻度值
# 设置刻度值
ax12.set_yticks([-6,-3,0,3,6])
设置标题
# 设置标题
ax12.set_title('箱型图')
完整代码
import matplotlib.pyplot as plt
import numpy as np
import random
# 中文设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于解决保存图像是负号‘-’显示为方框的问题
# 设置画布
fig = plt.figure(figsize=(8,5),dpi=120)
ax12 = fig.add_subplot(111)
# 箱型图
# 设置数据
data =[np.random.normal(0,i,100) for i in range(1,4)]
# 绘制图形
boxs = ax12.boxplot(data,patch_artist=True,
vert=True,widths=[0.2,0.4,0.3])
# 设置颜色
colors = ['pink', 'lightblue', 'lightgreen']
for patch,color in zip(boxs['boxes'],colors):
patch.set_facecolor(color)
# 设置刻度值
ax12.set_yticks([-6,-3,0,3,6])
# 设置标题
ax12.set_title('箱型图')
plt.tight_layout()
plt.show()
参考资料:
Matplotlib - 箱线图、箱型图 boxplot () 所有用法详解_Not Found黄小包-CSDN博客_matplotlib箱线图
matplotlib可视化箱线图 - 知乎
以下主要记录图形参数的一些常用设置
t | 注释内容 |
xytext | 注释位置 |
xy | 注释的坐标点 |
color | 注释颜色 |
weight | 字体线性 |
bbox | 注释框 |
arrowprops | 绘制箭头 |
headwidth | 箭头大小 |
width | 箭头线大小 |
facecolor | 箭头颜色 |
edgecolor | 箭头边框颜色 |
shrink | 箭头线收缩长度 |
x,y | 注释内容位置 |
---|---|
family | 字体 |
fontsize | 字体大小 |
style | 字体风格 |
color | 字体颜色 |
参考资料:
Python绘图总结(Matplotlib篇)之字体、文本及注释_wuzlun的专栏-CSDN博客_matplotlib 字体
Matplotlib注释箭头样式_超级大洋葱的博客-CSDN博客
matplotlib命令与格式:标题(title),标注(annotate),文字说明(text)_开码河粉-CSDN博客_plt设置title
x | |
---|---|
cmap | 图像色彩 |
extent | 坐标轴范围 |
origin | 图像原点位置 |
alpha | 透明度 |
interpolation | 显示方式 |
aspect | 控制轴的纵横比 |
参考资料:
Matplotlib imshow()函数_叫我SKY的博客-CSDN博客
matplotlib基础绘图命令之imshow_庐州月光的博客-CSDN博客
ax | 颜色条的位置 |
norm | 颜色条的大小值 |
cmap | 色彩 |
orientation | orientation |
extend | extend |
参考资料:
python matplotlib自定义colorbar颜色条-以及matplotlib中的内置色条_留下的,留不下的-CSDN博客
plt.axes([左边,底部,宽度,高度]) | 设置子图表大小 |
plt.subplot | 创建单个子图表 |
plt.subplots | 快速创建多个子图表 |
plt.GridSpec | 自定义排列 |
subplots_adjust | 自定义设置图像间距 |
plt.tight_layout | 自动调整图像间距 |
nrows | 行数 |
ncols | 列数 |
num | 画布名称 |
facecolor | 画布背景颜色 |
edgecolor | 画布边框颜色 |
frameon | 是否绘制画布图框 |
figsize | 图像大小 |
sharex | 相同X轴刻度 |
sharey | 相同Y轴刻度 |
left | 左边 |
bottom | 底部 |
right | 右边 |
top | 顶部 |
wspace | 左右宽度 |
hspace | 上下宽度 |
参考资料:
plt绘图与Axes绘图_风浅安然的博客-CSDN博客
fontsize | 字体大小 |
fontweight | 字体粗细 |
fontstyle | 字体类型 |
location | 字体位置 |
rotation | 字体旋转 |
alpha | 透明度 |
backgroundcolor | 标题背景 |
color | 标题颜色 |
bbox | 标题外框 |
xx-small | 最小 |
x-small | 较小 |
small | 小 |
medium | 中等 |
large | 大 |
x-large | 较大 |
xx-large | 最大 |
light | 细的 |
normal | 正常 |
medium | 中等 |
semibold | 较粗 |
normal | 正常 |
italic | 斜体 |
oblique | 倾斜 |
verticalalignment | 水平对齐;center、top、bottom、baselin |
horizontalalignment | 垂直对齐;left、right、center |
boxstyle | 方框外形 |
facecolor | 背景颜色 |
edgecolor | 边框线条颜色 |
edgewidth | 边框线条大小 |
参考资料:
matplotlib命令与格式:标题(title),标注(annotate),文字说明(text)_开码河粉-CSDN博客_plt设置title
plt.xlim;ax.set_xlim | X轴坐标 |
plt.ylim;ax.set_ylim | Y轴坐标 |
plt.axis | 坐标轴特殊设置 |
plt.xlabel | X轴名称 |
plt.ylabel | Y轴名称 |
twinx | 双坐标轴 |
plt.axis("tight") | 自动设置X、Y轴最值 |
plt.axis("equal") | 自动设置X、Y轴相同范围 |
plt.axis("off") | 隐藏所有刻度线和标签 |
plt.xticks;ax.set_xticks | X轴刻度值 |
plt.yticks;ax.set_yticks | Y轴刻度值 |
plt.xticks([]);ax.set_xticks([]) | 隐藏X轴刻度值和标签 |
plt.yticks([]);ax.set_yticks([]) | 隐藏Y轴刻度值和标签 |
plt.tick_params(bottom=False,top=False,left=False,right=False) | 隐藏刻度值 |
r'\frac{分子}{分母}' | 显示分数的方法 |
xticklabels | X轴刻度标签 |
yticklabels | Y轴刻度标签 |
参考资料:
matplotlib隐藏刻度线、标签和边线_韭浪的博客-CSDN博客_matplotlib 隐藏刻度
ax.spines[''].set_color('none') | 隐藏部分边线 |
ax.spines[].visible | 隐藏部分边线 |
for i in ['top', 'right', 'bottom', 'left']: ax.spines[i].set_visible(False) |
隐藏全部边线 |
ax.xaxis.set_ticks_position('') | 调整X轴位置 |
ax.yaxis.set_ticks_position('') | 调整Y轴位置 |
top | 顶部 |
bottom | 底部 |
left | 左边 |
right | 右边 |
参考资料:
matplotlib 的 spines模块详解_Python草堂的博客-CSDN博客_spines
alpha | 透明度 |
color | 颜色 |
linewidth | 网格线宽度 |
linestyle | 网格线分割 |
which | 线条层次;major、minor、both三个参数可选 |
axis | 网格轴;x、y、both三个参数可选 |
location(loc) | 图例位置 |
angle | 阴影的角度 |
density | 阴影线的密度 |
byt | 图例边框;o(显示)n(不显示) |
frameon | 图例边框;True、False |
bg | 图例背景色 |
cex | 字符大小 |
ncol | 图例列数 |
boxlty | 图例框的类型 |
boxlwd | 图例框线条粗细 |
title | 图例标题 |
title.col |
图例标题颜色 |
title.adj | 图例标题位置 |
图例中的文本可设置字体大小、文本字体、文本颜色、文本宽度,和标题、注释一样
参考资料:
python - matplotlib.legend()函数用法解析_鸡啄米的时光机的博客-CSDN博客
linestyle | 线条风格 |
marker | 线条标记 |
linewidth(lw) | 线条粗细 |
- | 实线 |
-- | 虚线 |
-. | 长短点虚线 |
: | 点线 |
参考资料:
python+matplotlib绘图线条类型和颜色选择_syyyy712的博客-CSDN博客_matplotlib 颜色
fill | 填充区域 |
fill_beween | 填充交叉区域 |
fill属性用得少,各位可以看下参考资料,讲的也比较详细(主要是懒!!!)
参考资料:
Matplotlib中的fill_between总结_kabuto_hui的博客-CSDN博客
Matplotlib:fill, fill_between ,fill_betweenx填充图形指定区域_错位的梦寐的博客-CSDN博客_matplotlib区域填充
(认真看完,再针对不懂的点单独查询,多加练习也就学会这玩意了)
推荐收藏 | 最强(全) Matplotlib 可视化实操指南
Python--Matplotlib(基本用法)_苦作舟的人呐-CSDN博客_matplotlib
用Python画如此漂亮的专业插图 ?简直So easy!
这16个Matplotlib 绘图实用小技巧值得你收藏~~
这40个Python可视化图表案例,强烈建议收藏!
Matplotlib全面语法教程 & 更好的理解Matplotlib用法 - 知乎
[Python从零到壹] 十七.可视化分析之Matplotlib、Pandas、Echarts入门万字详解_杨秀璋的专栏-CSDN博客_python聚类分析
写这篇文章的主要目的是为了记录自己所学的知识,同时,也为了给刚接触matplotlib的朋友一点参考价值。
文中有很多参考资料,都是很多大佬们写的一些资料,讲的也比较详细
最后感谢各位的观看,觉得可以的话可以点赞收藏喔
详见网址:matplotlib二维练习图纸代码.py-Python文档类资源-CSDN下载