版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章数据可视化【例3.1】Matplotlib绘图举例importmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotaspltimportnumpyasnp#让中文正常显示matplotlib.rcParams['font.family']='KaiTi'matplotlib.rcParams['axes.unicode_minus']=False#解决负号显示成方块的问题#π×2的正确写法是2*np.pi或2*math.pix=np.arange(0,2*np.pi,0.05)y=np.sin(x)fig=plt.figure()ax=fig.add_axes([0.1,0.1,0.8,0.8])#2.坐标轴范围别贴着边界,留一点边距ax.plot(x,y)ax.set_title('正弦曲线示例')ax.set_xlabel('横轴值')ax.set_ylabel('纵轴值')#y轴范围应该是[-1,1],而不是[1,1]ax.set_xlim(0,2*np.pi)ax.set_ylim(-1,1)plt.show()【例3.2】subplot举例importmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotaspltimportnumpyasnpfig=plt.figure(num=1,figsize=(4,4))plt.subplot(221)#画布分为2x2的区域plt.plot([1,2,3,4],[1,2,3,4])plt.subplot(222)plt.plot([1,2,3,4],[2,2,3,4])plt.subplot(223)plt.plot([1,2,3,4],[1,2,2,4])plt.subplot(224)plt.plot([1,2,3,4],[1,2,3,3])plt.show()【例3.3】add_subplot举例importmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotaspltimportnumpyasnp#让中文正常显示fig=plt.figure(num=1,figsize=(4,4))ax1=fig.add_subplot(221)#画布分为2x2的区域rect=plt.Rectangle((0.1,0.2),0.3,0.6,color='r')#创建一个矩形,参数:(x,y),width,heightax1.add_patch(rect)#将形状添加到子图上ax2=fig.add_subplot(222)circ=plt.Circle((0.5,0.3),0.2,color='r',alpha=0.3)#创建一个椭圆,参数:中心点,半径,默认圆形随窗口大小进行长宽压缩ax2.add_patch(circ)#将形状添加到子图上ax3=fig.add_subplot(223)pgon=plt.Polygon([[0.2,0.2],[0.65,0.6],[0.2,0.6]])#创建一个多边形,参数:每个顶点坐标ax3.add_patch(pgon)#将形状添加到子图上fig.canvas.draw()#子图绘制plt.show()【例3.4】折线图举例importnumpyasnpimportmatplotlibmatplotlib.use('TkAgg')#强制走Tk图形后端,保证弹出独立窗口frommatplotlibimportpyplotaspltx=np.arange(1,11)y=2*x*x+5plt.title("plotfigure")plt.xlabel("xaxis")plt.ylabel("yaxis")plt.plot(x,y)plt.show()【例3.5】散点图举例importnumpyasnpimportmatplotlib.pyplotaspltx=np.arange(1,10)#产生测试数据y=xfig=plt.figure()ax1=fig.add_subplot(111)ax1.set_title('ScatterPlot')#设置标题plt.xlabel('X')#设置X轴标签plt.ylabel('Y')#设置Y轴标签ax1.scatter(x,y,c='r',marker='o')#画散点图plt.legend('x1')#设置图标plt.show()#显示所画的图【例3.6】饼状图举例importmatplotlib.pyplotaspltimportnumpyasnplabels=['Mon','Tue','Wed','Thu','Fri','Sat','Sun']data=np.random.rand(7)*100plt.pie(data,labels=labels,autopct='%1.1f%%')plt.axis('equal')plt.legend()plt.show()【例3.7】条形图举例importmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotaspltimportnumpyasnpplt.rcParams['font.size']=10#全局字号plt.rcParams['axes.unicode_minus']=False#解决负号显示方框labels=['Apple','Banana','Orange','Pear','Watermelon']sales=[83,61,55,47,38]fig,ax=plt.subplots(figsize=(6,4))bars=ax.bar(labels,sales,color='tomato',edgecolor='k',linewidth=0.8)#数值标签置顶forbinbars:height=b.get_height()ax.text(b.get_x()+b.get_width()/2,height+1,f'{height}',ha='center',va='bottom')ax.set_ylabel('Sales/boxes')ax.set_title('Fruitsales')plt.tight_layout()plt.show()【例3.8】箱线图举例importmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotaspltimportnumpyasnp#1.造数据np.random.seed(42)data=np.concatenate([np.random.normal(100,10,90),np.random.normal(150,15,10)])#2.画图fig,ax=plt.subplots(figsize=(6,3))bp=ax.boxplot(data,vert=False,patch_artist=True,boxprops=dict(facecolor='lightblue'),showmeans=False,widths=0.3)#3.关键数值q1,q2,q3=np.percentile(data,[25,50,75])iqr=q3-q1whis_lo=q1-1.5*iqrwhis_hi=q3+1.5*iqr#4.标注(纯英文,位置用y=0.15保证在图内)style=dict(fontsize=9,va='center',ha='center')y_txt=0.15ax.text(q1,y_txt,f'Q1\n{q1:.1f}',**style)ax.text(q2,y_txt,f'Q2\n{q2:.1f}',**style)ax.text(q3,y_txt,f'Q3\n{q3:.1f}',**style)#IQR箭头ax.annotate('',xy=(q3,0.35),xytext=(q1,0.35),arrowprops=dict(arrowstyle='<->',color='red'))ax.text((q1+q3)/2,0.4,f'IQR={iqr:.1f}',color='red',**style)#须线ax.text(whis_lo,y_txt,f'Lower\n{whis_lo:.1f}',**style)ax.text(whis_hi,y_txt,f'Upper\n{whis_hi:.1f}',**style)ax.set_xlim(50,180)ax.set_yticks([])ax.set_title('BoxplotElements')plt.tight_layout()plt.show()【例3.9】面积图举例#0.统一导入importmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotaspltimportnumpyasnpplt.rcParams['font.size']=10plt.rcParams['axes.unicode_minus']=Falsex=np.linspace(0,10,200)y=2+np.sin(x)*np.exp(-x*0.2)days=np.arange(1,8)#一周7天A=np.array([20,22,18,25,30,28,32])B=np.array([15,19,16,22,24,26,29])C=np.array([10,12,14,15,18,20,23])labels=['ProductA','ProductB','ProductC']colors=['#ff7f0e','#2ca02c','#1f77b4']plt.figure(figsize=(6,4))plt.stackplot(days,A,B,C,labels=labels,colors=colors,alpha=0.8)plt.legend(loc='upperleft')plt.title('StackedAreaChart')plt.xlabel('Day')plt.ylabel('Sales')plt.tight_layout()plt.show()【例3.10】环形图举例#0.统一导入importmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotaspltimportnumpyasnpplt.rcParams['font.size']=10plt.rcParams['axes.unicode_minus']=False#内环:大类outer_labels=['Mobile','Desktop']outer_sizes=[60,40]outer_colors=['#ff9f43','#0984e3']#外环:细分inner_labels=['iOS','Android','Win','macOS']inner_sizes=[35,25,22,18]inner_colors=['#feca57','#ff7675','#74b9ff','#a29bfe']fig,ax=plt.subplots(figsize=(6,6),subplot_kw=dict(aspect='equal'))#外环(细分数)ax.pie(inner_sizes,labels=inner_labels,colors=inner_colors,autopct='%1.1f%%',startangle=90,radius=1,#外半径wedgeprops=dict(width=0.3,edgecolor='w'))#内环(大类)ax.pie(outer_sizes,labels=outer_labels,colors=outer_colors,autopct='%1.1f%%',startangle=90,radius=0.7,#内半径wedgeprops=dict(width=0.3,edgecolor='w'))#中心白圆centre_circle=plt.Circle((0,0),0.4,fc='white')fig.gca().add_artist(centre_circle)ax.set_title('Device&OSSplitDonutChart')plt.tight_layout()plt.show()【例3.11】三维图两种创建方式方法一:利用关键字frommatplotlibimportpyplotaspltfrommpl_toolkits.mplot3dimportAxes3D#定义坐标轴fig=plt.figure()ax1=plt.axes(projection='3d')#ax=fig.add_subplot(111,projection='3d')#可以绘制多个子图方法二:利用三维轴方法frommatplotlibimportpyplotaspltfrommpl_toolkits.mplot3dimportAxes3D#定义图像和三维格式坐标轴fig=plt.figure()ax2=Axes3D(fig)【例3.12】绘制三角螺旋线importmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotaspltimportnumpyasnpplt.rcParams['font.size']=10plt.rcParams['axes.unicode_minus']=False#1.创建图+3D子图fig=plt.figure(figsize=(6,4))ax=fig.add_subplot(111,projection='3d')#2.数据zline=np.linspace(0,15,1000)xline=np.sin(zline)yline=np.cos(zline)#3.绘图ax.plot3D(xline,yline,zline,'gray')#4.显示plt.show()【例3.13】绘制三维散点的数据importmatplotlib.pyplotaspltimportnumpyasnpax=plt.axes(projection='3d')zdata=15*np.random.random(100)xdata=np.sin(zdata)+0.1*np.random.randn(100)ydata=np.cos(zdata)+0.1*np.random.randn(100)ax.scatter3D(xdata,ydata,zdata,c=zdata,cmap='Reds')【例3.14】绘制三维等高线图frommpl_toolkitsimportmplot3dimportmatplotlib.pyplotaspltimportnumpyasnpdeff(x,y):returnnp.sin(np.sqrt(x**2+y**2))x=np.linspace(-6,6,30)y=np.linspace(-6,6,30)X,Y=np.meshgrid(x,y)Z=f(X,Y)fig=plt.figure()ax=plt.axes(projection='3d')ax.contour3D(X,Y,Z,50,cmap='binary')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel('z')#俯仰角设为60度,把方位角调整为35度ax.view_init(60,35)【例3.15】直方图举例importnumpyasnpimportmatplotlibmatplotlib.use('TkAgg')#强制Tk后端,独立窗口frommatplotlibimportpyplotaspltimportseabornassnsimportwarningswarnings.filterwarnings('ignore')#可选:样式sns.set_style('darkgrid')plt.rcParams['figure.figsize']=(8,4)plt.rcParams['figure.dpi']=100plt.rcParams['axes.unicode_minus']=False#生成100个成标准正态分布的随机数x=np.random.normal(size=100)#kde=True进行核密度估计sns.distplot(x,kde=True,hist=False)#hist为FALSE,直接绘制密度图而没有直方图plt.show()【例3.16】核密度图举例importnumpyasnpimportmatplotlibmatplotlib.use('TkAgg')#强制Tk后端,独立窗口frommatplotlibimportpyplotaspltimportseabornassnsfig,ax=plt.subplots()np.random.seed(4)#可复现Gaussian=np.random.normal(0,1,1000)#标准正态数据#1.直方图(密度尺度)ax.hist(Gaussian,bins=25,histtype="stepfilled",density=True,alpha=0.6,color='skyblue')#2.KDE曲线sns.kdeplot(Gaussian,shade=True,ax=ax,color='navy')ax.set_title('StandardNormalDistribution')ax.set_xlabel('Value')ax.set_ylabel('Density')plt.tight_layout()plt.show()【例3.17】小提琴图举例importnumpyasnpimportmatplotlibmatplotlib.use('TkAgg')#强制Tk后端,独立窗口frommatplotlibimportpyplotaspltimportseabornassnsimportwarningswarnings.filterwarnings('ignore')#可选:样式sns.set_style('darkgrid')plt.rcParams['figure.figsize']=(8,4)plt.rcParams['figure.dpi']=100plt.rcParams['axes.unicode_minus']=False#加载irisiris=sns.load_dataset('iris')#画小提琴图sns.violinplot(data=iris,palette='hls')plt.title('IrisFeaturesDistribution')plt.xlabel('Features')plt.ylabel('Value')#关键:弹出窗口plt.show()【例3.18】绘制热力图importnumpyasnpimportmatplotlibmatplotlib.use('TkAgg')#强制Tk后端,独立窗口frommatplotlibimportpyplotasplti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026温岭医疗面试题目及答案
- 小企业借款合同范本
- 人力资源招聘与面试技巧指导书
- 海沙买卖合同协议
- 食堂设备移交协议书
- 趣味故事会:让故事充满童趣小学主题班会课件
- 电商平台物流配送优化提升方案
- 博物馆珍贵文物失窃警情处置供安保部门预案
- 社交媒体公关危机系统制定与执行方案团队预案
- 感恩教育珍惜家人小学主题班会课件
- 2026年春国开大学《形势与政策》大作业参考答案(2篇)范文
- 重症患者的舒适护理与人文关怀
- 新生儿心律失常的护理
- 办公文档扫描错误紧急预案
- 建筑类毕业设计说明书模板
- 干燥综合征相关间质性肺病诊疗指南(2025年版)
- 教师资格备考(幼儿园)《综合素质》模拟试题及答案解析
- 2026年中考历史一轮复习:八年级上册知识点背诵提纲
- SMT设备介绍教学课件
- 儿童生理特点与护理
- 2026年兴业银行招聘风险管理专业题含答案
评论
0/150
提交评论