Python金融大数据分析课件 第11章Matplotlib绘图_第1页
Python金融大数据分析课件 第11章Matplotlib绘图_第2页
Python金融大数据分析课件 第11章Matplotlib绘图_第3页
Python金融大数据分析课件 第11章Matplotlib绘图_第4页
Python金融大数据分析课件 第11章Matplotlib绘图_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章

Matplotlib绘图汇报人:学习目标理解数据可视化掌握Matplotlib的常用设置掌握Matplotlib常见图形的绘制能够使用Matplotlib实现可视化目录11.1Matplotlib概述11.2Matplotlib常用设置11.3Matplotlib常见图形绘制

11.4金融数据可视化实训Matplotlib概述11.1Matplotlib概述Matplotlib是Python生态圈中应用最广泛的绘图库,支持二维绘图和部分三维绘图。它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,实现数据可视化。通过Matplotlib,开发者仅需要几行代码,便可以生成绘图,包括折线图、散点图、柱状图、饼图、直方图、子图等。首先,为了使用Matplotlib,需要进行安装,安装命令如下:pipinstallMatplotlib安装完成之后,需要导入Matplotlib模块,导入命令如下:importmatplotlib.pyplotasplt需要注意的是:这一行导入命令,是从Matplotlib中导入了pyplot绘图模块。pyplot模块是Matplotlib最核心的模块,几乎所有样式的2D图形都是经过该模块绘制出来的。根据传统惯例,我们将pyplot导入重命名为plt。这并不是强制要求,但遵守惯例是一个好习惯。Matplotlib概述因matplotlib的默认配置文件无法正确显示中文,图形中的中文标题将错误显示为小方格。要正确显示中文可用下面两种方法解决。方法一:每次在程序头部设定中文字体,示例代码如下:plt.rcParams['font.sans-serif']=['SimHei']#指定中文黑体字体plt.rcParams['axes.unicode_minus']=False#False修正坐标轴上负号'-'显示为方块的问题方法二:修改matplotlib配置文件以显示中文(推荐此方法)。此方法可以一劳永逸解决中文的显示问题,步骤如下:(1)打开配置文件matplotlibrc(2)查找“#font.sans-serif:BitstreamVeraSerif,NewCenturySchoolbook”并将前面的注释符号#去掉,并在字体列表前添加SimHei(黑体常规字体),即修改为:font.sans-serif:SimHei,BitstreamVeraSerif,NewCenturySchoolbook。(3)在配置文件中找“#axes.unicode_minus:True”并去掉注释符号#,同时将True改为False,即修改为:axes.unicode_minus:False。(4)保存配置文件,重启Spyder后新配置生效,图形中的中文输出正常。Matplotlib常用设置11.2基本绘图plot()函数plt.plot()函数完成折线图的绘制,其语法格式为:plt.plot(x,y,format_string,**kwargs)画布设置在matplotlib中,使用plt.figure()函数进行画布设置,其格式如下:plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True)plt.figure常用参数及其说明如表11-2所示。添加注释和图例设置在matplotlib中,使用plt.text(x,y,'text')函数添加注释,x,y代表注释坐标,'text'参数代表内容,示例代码如下:plt.text(1,1.5,'first') #在(1,1.5)处显示firstplt.text(2,4.5,'second') #在(2,4.5)处显示secondplt.legend(loc=0)用于显示图例,颜色、线型和标记符号绘图时很可能需要指定线条的颜色、线型、标记符号等参数,语句格式如下:plt.plot(x,y,ls='线型',color='颜色',marker='标记')标记符号子图子图的本质是在一个较大的图形中同时放置一组较小的坐标轴,布局形式可以多种多样。在Matplotlib中,使用add_subplot()函数完成子图绘制,其格式如下:fig,ax=plt.subplots(nrows,ncols,figsize,sharex,sharey,subplot_kw,gridspec_kw,fig_kw)其返回值:type(fig)是matplotlib.figure.Figure,type(ax)是numpy.ndarray。常用参数及其说明如表11-8所示。颜色填充为了更加明显的显示数据范围,可以对图形进行颜色填充。在Matplotlib中,使用fill_between()函数完成颜色填充,其格式如下:plt.fill_between(x,y1,y2=0,where=None,interpolate=False,step=None,*,data=None,**kwargs)Matplotlib常见图形绘制11.311.3.1柱形图使用plt.bar()函数完成条形图的绘制,其格式如下:plt.bar(x,y,width,color,edgecolor,bottom,linewidth,align,tick_label,align)bar()函数常用参数及其说明如表11-7所示。11.3.1柱形图中国2021年城市GDP排行前五为上海市、北京市、深圳市、广州市和重庆市,具体数据分别为43214.85亿、40269.6亿、30664.85亿、28231.97亿、27894.02亿,绘制柱形图展示各城市GDP水平。importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=FalseGDP=[43214.85,40269.6,30664.85,28231.97,27894.02]plt.bar(range(5),GDP,edgecolor='r',align='center',color='cadetblue',alph a= 0.7)plt.ylabel('GDP')#添加轴标签plt.title('城市GDP排行榜')#添加刻度标签plt.xticks(range(5),['上海市','北京市','深圳市','广州市','重庆市'])plt.ylim([5000,45000])#设置Y轴的刻度范围11.3.1柱形图#为每个条形图添加数值标签forx,yinenumerate(GDP): plt.text(x-0.3,y+200,y)plt.show()11.3.1柱形图plt.bar()函数的使用方法和柱状图类似,但X轴和Y轴数据跟柱状图相反,使用示例11-1数据绘制条形图,代码如下:importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=FalseGDP=[43214.85,40269.6,30664.85,28231.97,27894.02]plt.barh(range(5),GDP,edgecolor='y',align='center',color='b',alpha=0.7)plt.xlabel('GDP')#添加轴标签plt.title('城市GDP排行榜')#添加刻度标签plt.yticks(range(5),['上海市','北京市','深圳市','广州市','重庆市'])plt.xlim([10000,50000])#设置X轴的刻度范围#为每个条形图添加数值标签11.3.1柱形图forx,yinenumerate(GDP): plt.text(y+0.1,x,'%s'%y,va='center')plt.show()11.3.2饼图饼图用于显示数据集中各数据所占百分比。一般要求仅有一个要绘制的数据系列,要绘制的数值没有负值并且几乎没有零值,对类别数目无限制(但一般不会过多),各类别分别代表整个饼状图的一部分。各个部分的数据不需要标注百分比,绘图函数会自动计算各数值所占比例。饼图的绘制可以使用matplotlib库中的pie()函数,其格式如下:plt.pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,textprops=None,center=(0,0),frame=False)某家庭2021年支出项目包括房贷、育儿、基本生活费、车辆养护、旅游、其他,具体数额分别为70776元、32561元、46891元、12312元、23678元、9856元,请绘制饼图展示家庭消费各项占比。11.3.2饼图importnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsesizes=[70776,32561,46891,12312,23678,9856]plt.figure(figsize=(6,10)) #设置图形大小labels=['房贷','育儿','基本生活费','车辆养护','旅游','其它']explode=(0.1,0,0,0,0,0)patches,ltext,ptext=plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)plt.title("饼图示例-8月份家庭支出")forxinltext: x.set_size(12) #设置标注文字大小11.3.2饼图forxinptext: x.set_size(12) #设置百分比文字大小plt.axis('equal') #设置x/y轴单位长度相等plt.legend(loc=2,borderpad=0) #显示图例plt.show()11.3.3散点图散点图也叫X-Y图,它将所有的数据以点的形式展现在直角坐标系上,以显示变量之间的相互影响程度,点的位置由变量的数值决定。通过观察散点图上数据点的分布情况,可以推断出变量之间是否存在关联。还可以通过散点图观察离群点,如果有某一个点或者某几个点偏离大多数点,就是离群点。散点图的绘制可以使用Matplotlib库中的scatter()函数,其格式如下:plt.scatter(x,y,s=20,c=None,marker='o',cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,edgecolors=None)示例代码:importnumpyasnpimportmatplotlib.pyplotasplt#产生测试数据

x=np.arange(20)y=2*x11.3.3散点图#画散点图

plt.scatter(x,y,c='r',s=100,linewidths=x,marker='o')plt.title('ScatterPlot')#设置标题#设置X轴标签

plt.xlabel('X')#设置Y轴标签

plt.ylabel('Y=2X')#设置图标

plt.legend('x1')#显示所画的图

plt.show()11.3.4箱线图#箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图,因形状如箱子而得名。1977年,美国著名数学家JohnW.Tukey首先在他的著作《ExploratoryDataAnalysis》中介绍了箱形图。一组数据按照从小到大顺序排列后,把该组数据四等分的数,称为四分位数。第一四分位数(Q1)、第二四分位数(Q2,也叫“中位数”)和第三四分位数(Q3)分别等于该样本中所有数值由小到大排列后第25%、第50%和第75%的数字。在箱线图中,箱子的中间有一条线,代表了数据的中位数。盒子中间的一条竖直线被称为胡须线(whisker)。箱子的上下底,分别是数据的上四分位数和下四分位数。下四分位数、中位数、上四分位数组成一个盒子,四分位距(IQR=Q3-Q1构成盒子的长度,这个区间包含50%的数据点分布。箱线图中定义最大观测值max=Q3+1.5*IQR,最小观测值min=Q1-1.5*IQR,分别为上边缘和下边缘,各用一短横线表示。因此,箱子的高度在一定程度上反映了数据的波动程度,上下边缘则代表了该组数据的最大值和最小值,上下边缘以外的数据点称为离群点(异常点),离群点单独用小圆圈标记。11.3.4箱线图箱形图的绘制可以使用matplotlib库中的boxplot函数,其格式如下:plt.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,patch_artist=None,meanline=None,showmeans=None,showcaps=None,showbox=None,showfliers=None,boxprops=None,labels=None,flierprops=None,medianprops=None,meanprops=None,capprops=None,whiskerprops=None)示例:某公司员工的月薪分别为4600元、5500元、7365元、5321元、6324元、5385元、4968元、3357元、2931元,请绘制箱线图展示月薪分布情况。importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspdx=[4600,5500,7365,5321,6324,5385,4968,3357,2931]11.3.4箱线图#绘制箱线图plt.boxplot(x=x,#指定绘图数据patch_artist=True,#要求用自定义颜色填充盒形图,默认白色填充showmeans=True,#以点的形式显示均值boxprops={'color':'black','facecolor':'c'},#填充色和边框色#设置异常值属性,点的形状、填充色和边框色Flierprops={'marker':'D','markerfacecolor':'red','color':'black'},#设置均值点的属性,点的形状、填充色meanprops={'marker':'*','markerfacecolor':'y'},#设置中位数线的属性,线的类型和颜色medianprops={'linestyle':'--','color':'orange'})plt.show()11.3.4箱线图11.3.5直方图直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据的分布情况。一般用横轴表示数据类型,纵轴表示分布情况,其宽度代表组距,高度代表指定组距内的数据数(频数)。直方图对于数据的分布的形状、中心位置和分散程度一目了然。直方图的绘制可以使用matplotlib库中的hist()函数,其格式如下:

plt.hist(x,bins=10,range=None,density=none,normed=False,weights=None,cumulative=False,bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,label=None,stacked=False)11.3.5直方图期末考试后,Python课程某班级的学生分数为56,67,69,75,74,78,77,73,86,84,94,66,81,75,68,55,92,请绘制直方图展示学生成绩分布情况。importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspdplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsex=[56,67,69,75,74,78,77,73,86,84,94,66,81,75,68,55,92]#设置图形的显示风格plt.style.use('ggplot')#绘制直方图plt.hist(x,#绘图数据 bins=5,#指定直方图的条形数为5个

11.3.5直方图 color='steelblue',#指定填充色 edgecolor='k',#指定直方图的边界色 label='成绩')#为直方图呈现标签#去除图形顶部边界和右边界的刻度plt.tick_params(top='off',right='off')plt.title("学生成绩直方图展示")#显示图例plt.legend()plt.show()11.3.6雷达图

雷达图也称为网络图、蜘蛛图、星图、蜘蛛网图,是一种显示多变量数据的图形方法。雷达图从同一点开始的轴上,表示的三个或多个定量变量的二维图表形式呈现。它将多个维度的数据量映射到坐标轴上,每一个维度的数据都分别对应一个坐标轴,这些坐标轴以相同的间距沿着径向排列,并且刻度相同。【示例11-5】绘制某学生成绩的雷达图。importnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#显示中文plt.rcParams['axes.unicode_minus']=False#正常显示负号results=[{"英语":78,"数学":96,"化学":91,"历史":72,"语文":80,"物理":93}]data_length=len(results[0])#将极坐标根据数据长度进行等分angles=np.linspace(0,2*np.pi,data_length,endpoint=False)labels=[keyforkeyinresults[0].keys()]11.3.6雷达图score=[[vforvinresult.values()]forresultinresults]#使雷达图数据封闭score_a=np.concatenate((score[0],[score[0][0]]))angles=np.concatenate((angles,[angles[0]]))labels=np.concatenate((labels,[labels[0]]))#绘制雷达图plt.polar(angles,score_a,marker='.',ms=10,mfc='r',mec='g',color='y',ls='--',lw=2)#设置雷达图中每一项的标签显示plt.thetagrids(angles*180/np.pi,labels)#填充颜色plt.fill(angles,score_a,color='y',alpha=0.3)plt.ylim(0,105)plt.title("成绩对比")plt.show()11.3.6雷达图11.3.7热力图热力图是数据在页面上密度、分布以及变化的体现,通过选择不同的颜色来对应不同的数据区间,将数据量大小转化成颜色差异,图形化表达了数据差异。热力图的绘制可以使用Matplotlib库中的imshow()函数,其格式如下:

plt.imshow(X,cmap=None,norm=None,aspect=None,interpolation=None,alpha=None,vmin=None,vmax=None,origin=None,extent=None,shape=None,filternorm=1,filterrad=4.0,imlim=None,resample=None,url=None,hold=None,data=None,**kwargs)11.3.7热力图示例代码如下:importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.colorsimportLogNormplt.rcParams['font.sans-serif']=['SimHei']#显示中文plt.rcParams['axes.unicode_minus']=False#正常显示负号#生成随机数据,10行10列,最大值2,最小值-2x=np.clip(np.random.randn(10,10),-2,2)#绘制热力图plt.imshow(x,interpolation='nearest',cmap=plt.cm.winter)#设置颜色plt.colorbar(cax=None,ax=None,shrink=0.5)plt.title('热力图',fontweight="bold")plt.show()11.3.7热力图金融数据可视化实训11.4金融数据可视化实训实训目的(1)掌握Matplotlib基础语法。(2)掌握Matplotlib常用设置。(3)掌握Matplotlib常见图形绘制。实训要求读取文件“贷款.xls”,使用Matplotlib进行可视化分析。金融数据可视化实训任务1:读取文件“贷款.xls”,绘制男女贷款人数对比图。plt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=Falsedfgroup=df_house.groupby('性别').size()plt.bar(range(2),dfgroup,edgecolor='r',align='center',color='cadetblue',alpha=0.7)plt.ylabel('人数')#添加轴标签plt.title('男女贷款人数对比')plt.ylim([0,600])#设置Y轴的刻度范围plt.xticks(range(2),['女','男'])forx,yinenumerate(dfgroup):plt.text(x,y+6,y)plt.savefig('1.png')plt.show()金融数据可视化实训任务2:绘制各区域申请贷款人数占比图。sizes=df_house.groupby('所在区域').size()plt.figure(figsize=(6,10))#设置图形大小labels=['Rural','Semiurban','Urban

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论