版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章
数据可视化Python程序设计本章要点绘制多个子图绘制曲线标注与美化
数据文件绘图可视化图表曲线拟合DeepSeek的使用学习目标了解数据可视化的基本概念及其在数据分析中的重要性;理解不同类型图表(曲线图、柱形图、饼图、雷达图等)的特点和适用场景;掌握使用Python进行数据可视化的方法;熟悉如何利用编程手段实现数据的直观展示,增强数据分析能力,并通过实践提高解决问题的能力和创新思维;培养良好的数据表达习惯,强调准确、清晰地传递信息的重要性,以及在科学和技术交流中的责任意识。1绘制曲线绘制曲线
在众多领域中,常用各类数字指标来展现数据的总体情况。为使数据意义更直观形象,常借助绘图手段对数据信息予以直观展示。Matplotlib可生成多种静态、动态以及交互式的可视化图形。用户可以通过简单的代码,快速生成高质量的图表,如线形图、柱状图、饼图等,以满足数据分析、报告撰写以及科学研究的可视化需求。此外,Matplotlib还支持多种输出格式,如PNG、PDF、SVG等。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。绘制曲线使用Matplotlib绘制简单曲线图首先要导入Matplotlib库中的绘图子模块pyplot,语法如下:importmatplotlib.pyplotasplt绘制曲线的关键函数有两个:plot(x,y),根据坐标x,y值绘图,是将数据绘制到内存中的图形对象;show(),将缓冲区的绘制结果显示到屏幕,即将图形呈现给用户;每次show()后状态清空,需重新绘图。绘制曲线plot()函数的语法格式如下。plot([x],y,[fmt],*,data=None,**kwargs)#绘制单条曲线plot([x],y,[fmt],[x2],y2,[fmt2],...,**kwargs)#同时绘制多条曲线参数说明:x,y:参数x,y可为数组类型数据或标量。fmt:表示线条颜色、标记和线型的格式字符串类,fmt='[marker][line][color]',例如'go--'表示标记为“o”(圆点),线型为虚线,颜色为“green”,等价为“color='green',linestyle='--',marker='*'”data:指定数据容器(DataFrame/dict),通过列名/键名来指定x和y数据**kwargs:二维线型图的属性参数,可选参数,参数含义可以查看官方文档。绘制曲线示例:通过点(2,1)、(4,2)、(6,3)来画直线#绘制直线importmatplotlib.pyplotasplt#调用绘图库matplotlib中的pyplot子库,并起别名为pltx=[2,4,6]#构建x坐标的列表y=[1,2,3]#构建y坐标的列表plt.plot(x,y)#过(2,1),(4,2),(6,3)画线plt.show()#显示创建的绘图对象绘制曲线示例:在x∈[0,10)内绘制函数y=x2、y=x的曲线#绘制函数曲线importmatplotlib.pyplotasplt#导入matplotlib中的pyplot子库,并起别名为pltimportnumpyasnp#导入NumPy库,起别名npx=np.arange(0,10,0.25)#在[0,10)区间内,按步长0.25生成数组square=x**2#根据数组x,获得值为每个元素平方的数组cube=x**3#根据数组x,获得值为每个元素立方的数组plt.plot(x,square)#绘制平方函数曲线plt.plot(x,cube)#绘制立方函数曲线plt.show()#显示创建的绘图对象实例10.1绘制正余弦函数曲线#绘制正余弦函数曲线importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0,4*np.pi,128)#在0-4π之间生成等间距的128个点sinx=np.sin(x)#生成sin(x)值数组cosx=np.cos(x)#生成cos(x)值数组plt.plot(x,sinx)#绘制sin(x)曲线图像plt.plot(x,cosx)#绘制cos(x)曲线图像plt.show()#显示绘制的图像2标注与美化标注与美化Matplotlib中支持对曲线进行各种标注与美化,规定线条颜色、线型、线标识、图名等操作。线条风格描述-实线--破折线:虚线-.点划线线型(linestyle或ls)标注与美化Matplotlib中支持对曲线进行各种标注与美化,规定线条颜色、线型、线标识、图名等操作。线条颜色(color或c)color别名颜色color别名颜色blueb蓝色greeng绿色redr红色yellowy黄色cyanc青色blackk黑色magentam洋红色whitew白色标注与美化Matplotlib中支持对曲线进行各种标注与美化,规定线条颜色、线型、线标识、图名等操作。常用线条标记(marker)标记描述标记描述“,”像素“>”右三角形“.”点“<”左三角形“o”圆“v”倒三角形“D”菱形“^”正三角形“d”小菱形“1”正三分支“s”正方形“2”倒三分支“p”五边形“3”左三分支“h”1号六边形“4”右三分支“H”2号六边形“*”星号“8”八边形“+”加号“|”竖直线“P”填充的加号“_”水平线“x”乘号“None”,“”,“”无标记'$...$'字符串转为数学文本描述标注与美化Matplotlib图表的组成元素还包含:标题、图例、x轴名称、y轴名称、x轴刻度标签、y轴刻度标签等。标签相关函数函数描述title()为当前绘图添加标题legend()为当前绘图放置图例annotate()为指定数据点创建注释xlabel(s)设置x轴标签ylabel(s)设置y轴标签xticks()设置x轴刻度位置和标签yticks()设置y轴刻度位置和标签实例10.2正余弦函数曲线标注绘制区间为[0,4π]的正弦与余弦函数的曲线,为其添加标题、x轴和y轴的名称、图例等图表元素,同时设定线型、数据点标记、坐标轴、刻度限制、填充及注释。为方便学习和理解,本例对这些要求分4步实现:(1)设置线型、颜色,标题,轴名称和图例;代码与结果如下:实例10.2正余弦函数曲线标注#绘制正余弦函数曲线#设置线型、颜色,标题,轴标签和图例importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0,4*np.pi,128)#在0-4π之间生成等间距的128个点sinx=np.sin(x)#生成sin(x)值数组cosx=np.cos(x)#生成cos(x)值数组#plt.plot(x,sinx)#绘制sin(x)曲线图像#plt.plot(x,cosx)#绘制cos(x)曲线图像#绘制正弦曲线,使用洋红色的、实线、宽度为2(像素)的线条,标识为点线plt.plot(x,sinx,color="magenta",linewidth=2,linestyle="-.",label="sin(x)")实例10.2正余弦函数曲线标注#绘制余弦曲线,使用红色的、虚线、宽度为2.5(像素)的线条plt.plot(x,cosx,color="red",linewidth=2.5,linestyle="--",label="cos(x)")#设置标题,指定中文字体保证正确显示plt.title('正弦余弦函数曲线',fontproperties="SimHei")#设置轴标签plt.xlabel(u'x(弧度)',fontproperties="SimHei")#加x轴标签plt.ylabel(u'y',fontproperties="SimHei")#加y轴标签#设置图例plt.legend(loc='lowerleft')#设置线条名显示位置为左下角plt.show()#显示绘制的图像标注与美化在使用Matplotlib模块画坐标图时,往往需要对坐标轴设置很多参数,这些参数包括横纵坐标轴范围、坐标轴刻度大小、坐标轴名称等。在Matplotlib中包含了很多函数,用来对这些参数进行设置。函数描述xlim(xmin,xmax)设置当前x轴取值范围ylim(ymin,ymax)设置当前y轴取值范围xticks()设置x轴刻度位置和标签yticks()设置y轴刻度位置和标签标注与美化在使用Matplotlib模块画坐标图时,往往需要对坐标轴设置很多参数,这些参数包括横纵坐标轴范围、坐标轴刻度大小、坐标轴名称等。在Matplotlib中包含了很多函数,用来对这些参数进行设置。函数描述axhline(y=0,xmin=0,xmax=1)绘制水平线,x取值从0到1为整个区间。hlines()绘制水平线axvline(x=0,ymin=0,ymax=1)绘制垂直线,y取值从0到1为整个区间。vlines()绘制垂直线实例10.2正余弦函数曲线标注#添加坐标轴上下限、坐标轴标记,绘制x,y轴#在plt.show()前插入以下代码plt.ylim(-1.1,1.1)#设置纵轴的上下限,使边框比曲线略大plt.yticks([-1,0,+1],[r'$-1$',r'$0$',r'$+1$'])#设置纵轴记号plt.axhline(0,linestyle='--',color='black',linewidth=1)#绘制水平线y=0,x轴plt.axvline(0,linestyle='--',color='black',linewidth=1)#绘制垂直线x=0,y轴(2)添加坐标轴上下限、坐标轴标记,绘制x,y轴;代码与运行结果如下:标注与美化Matplotlib内置多个函数可实现各种填充效果,常用的填充函数包括填充水平区域、填充竖直区域和填充两条曲线包围的区域等。函数描述axhspan()水平区域axvspan()竖直区域fill_between()填充两条曲线围起的区域,区间由横坐标限定fill_betweenx()填充两条曲线围起的区域,区间由纵坐标限定实例10.2正余弦函数曲线标注#(续前例,在plt.show()前插入以下代码)#填充0与4pi之间,x轴与cos(x)包围的区域plt.fill_between(x,np.cos(x),where=((x>0)&(x<=4*np.pi)),facecolor='grey',alpha=0.4)#填充x轴上方y值在(0.25,0.5)之间区域,绿色,透明度50%#整个区间为0,1.0,此例中0,0.5表示取x轴前半部分区间,0.5,1.0表示取后半部区间plt.axhspan(0.25,0.5,color='green',alpha=0.5)#填充x轴下方y值在(-0.5,-0.25)之间区域,绿色,透明度25%plt.axhspan(-0.5,-0.25,color='green',alpha=0.25)#填充x轴上方x值在(3*np.pi-0.3,3*np.pi+0.3)之间区域,蓝色,透明度25%plt.axvspan(3*np.pi-0.3,3*np.pi+0.3,color='blue',alpha=0.25)#填充x轴上下方x值在(np.pi/2-0.3,np.pi/2+0.3)之间区域,蓝色,透明度50%#整个区间为0,1.0,此例中0.5,1.0表示取x轴上部区间,0,0.5表示取x轴下部区间plt.axvspan(np.pi/2-0.3,np.pi/2+0.3,0.5,1.0,color='blue',alpha=0.25)(3)填充部分区域;代码与运行结果如下:标注与美化Matplolib支持将绘制的图形显示在屏幕上和保存在文件中显示在屏幕上使用函数show(),无参数。保存到图片文件使用savefig(‘文件名’)函数,参数是用于保存图形的文件名;注意:如需保存文件,savefig(‘文件名’)语句必须置于show()语句前,这是因为show()函数在显示图像的同时,会清空缓冲区,此后无法再保存成文件。函数描述savefig('文件名')保存绘制的图像,该函数必须介于曲线绘制函数之后,且要在show()函数之前show()显示绘制的图像,同时清空缓冲区实例10.2正余弦函数曲线标注#(续前例,在plt.show()前插入以下代码)#添加数据标注t=np.pi/3
#过(t,0),(t,cos(t))画线段,黑色,点线plt.plot([t,t],[0,np.cos(t)],color='black',linewidth=2,linestyle="dotted")
#为(t,cos(t))处画一个红色圆点plt.scatter([t,],[np.cos(t),],50,color='red')
#为sin(t)处加注释plt.annotate(r'$\cos(\frac{2\pi}{3}))=\frac{{1}}{2}$',xy=(t,np.cos(t)),xycoords='data',xytext=(+40,10),textcoords='offsetpoints',fontsize=16,arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))#保存图片到当前文件夹,命名为sincosx.jpgplt.savefig("sincosx.jpg")(4)数据点标注及图像文件写入文件;代码与运行结果如下:3绘制多个子图绘制多个子图Matplotlib提供将同一画布划分成多个子区域的方法,可以将多个图形在同一个画布上不同区域绘制。可应用subplot()函数实现,语法:subplot(nrows,ncols,index,**kwargs)参数说明:
nrows:表示行数。
ncols:表示列数。
index:表示序号。当前画布被划分为nrows×ncols个子区域,index表示当前图绘制在第index个子区域。当行数、列数和序号全部小于10时,也可以将三个数字合并成一个三位数字来表示。例:
subplot(2,3,3)和subplot(233)都会创建一个2行3列的绘图区域,当前图序号为3实例10.3绘图多个子图#绘图多个子图importnumpyasnpimportmatplotlib.pyplotasplt
x1=np.linspace(0,2*np.pi,40)y1,y2=np.sin(x1),np.cos(x1)x2=np.linspace(-1,1,40)y3,y4=np.arcsin(x2),np.arccos(x2)
plt.subplot(2,2,1)#分成2x2,占用第一个,即第一行第一列的子图plt.plot(x1,y1,'r-.')plt.subplot(2,2,2)#分成2x2,占用第二个,即第一行第二列的子图plt.plot(x1,y2,'g-.')plt.subplot(2,2,3)plt.plot(x2,y3,'r--')#分成2x2,占用第三个,即第二行第一列的子图plt.subplot(2,2,4)plt.plot(x2,y4,'g--')#分成2x2,占用第四个,即第二行第二列的子图
plt.savefig("sincosx.png")#保存成图片plt.show()将一个画布分四个子图区域,第一行分两个子图,分别绘制正弦和余弦函数曲线,第二行也分两个子图,分别绘制反正弦和反余弦函数曲线。4数据文件绘图数据文件绘图除去根据函数绘制曲线外,更多的应用是根据文件中的数据绘制数据曲线。一般的做法是打开文件,读取文件中的数据到列表中,再绘制数据曲线。实例10.4读文件绘制数据曲线文件companytrade.csv存储了2014~2024年某公司的利润数据,以年份为x轴,每年利润数值为y坐标,利用文件中的数据绘制数据曲线。利用文件中的数据绘制曲线,需打开并逐行读取文件中的数据,要注意读取每行数据时,行末有一个换行符“\n”需要用replace()替换掉或用strip()函数过滤掉,读取的数据是字符型,需要转换成float()函数或eval()函数转换为数值型。再将其附加到列表中,构建分别包含x和y坐标的两个列表。实例10.4读文件绘制数据曲线#读文件绘制数据曲线importmatplotlib.pyplotaspltlsx=[]lsy=[]#打开文件,逐行读取数据、转换数据类型并附加到列表中withopen('companytrade.csv','r',encoding='ANSI')asfile:forlineinfile:#逐行读取文件中的数据dataline=line.strip().split(',')#strip()可去掉行末换行符,split()将字符串切分lsx.append((dataline[0]))#将dataline中序号为0的元素转为浮点型附加到列表lsx中lsy.append((dataline[1]))
#将dataline中序号为1的元素转为浮点型附加到列表lsy中实例10.4读文件绘制数据曲线lsx=lsx[1:]#删除年份标题lsy=list(map(float,lsy[1:]))#删除利润标题,且转换为floatplt.plot(lsx,lsy,marker='o',linestyle='--',c="blue",linewidth=3)#绘制数据曲线plt.title('2012年--2022年公司利润',fontproperties="SimHei")plt.xlabel(u'年份',fontproperties="SimHei")#加x轴标签plt.ylabel(u'利润(单位:万元)',fontproperties="SimHei")#加y轴标签plt.savefig("companytrade.png")#保存成图片plt.show()实例10.4读文件绘制数据曲线#利用NumPy读文件绘制数据曲线importmatplotlib.pyplotaspltimportnumpyasnpdata=np.loadtxt('companytrade.csv',dtype=str,delimiter=',',encoding="utf-8")#切片方法获取两列数据lsx=data[1:,0]lsy=data[1:,1].astype(float)#绘制数据曲线plt.plot(lsx,lsy,marker='o',linestyle='--',linewidth=3)plt.title('2014年-—2024年公司利润',fontproperties="SimHei")plt.xlabel(u'年份',fontproperties="SimHei")#加x轴标签plt.ylabel(u'利润(单位:万元)',fontproperties="SimHei")#加y轴标签plt.savefig("companytrade.png")plt.show()
在NumPy中,使用loadtxt函数可以方便地读取csv或txt文件,delimiter=','表示用逗号作为分隔符自动切分字段,并将数据载入NumPy数组。实例10.5多列数据绘图文件trade.csv存储了2015~2024年中国每年的进出口总额,利用文件中的数据绘制数据曲线。在同一个数据图用出口数据和进口数据分别绘制相应的数据曲线实例10.5多列数据绘图#读文件绘制数据曲线importmatplotlib.pyplotaspltlsx=[]lsy1=[]lsy2=[]#打开文件,逐行读取数据、转换数据类型并附加到列表中withopen('trade.csv','r',encoding='utf-8')asfile:forlineinfile:#逐行读取文件中的数据#去掉行末换行符,根据逗号将每行数据分成3个字符串,放入列表dataline中dataline=line.strip().split(',')#strip()可去掉行末换行符,split()将字符串切分lsx.append((dataline[0]))lsy1.append((dataline[1]))lsy2.append((dataline[2]))
实例10.5多列数据绘图lsx=lsx[1:]#删除年份标题lsy1=list(map(float,lsy1[1:]))#删除进口额标题,且转换为floatlsy2=list(map(float,lsy2[1:]))#删除出口额标题,且转换为float#绘制数据曲线plt.plot(lsx,lsy1,marker='o',linestyle='--',c="blue",linewidth=3)plt.plot(lsx,lsy2,marker='>',linestyle='-.',c="red",linewidth=3)plt.title('2015-2024年中国年进出口总额',fontproperties="SimHei")plt.xlabel(u'年份',fontproperties="SimHei")#加x轴标签plt.ylabel(u'(单位:万亿元)',fontproperties="SimHei")#加y轴标签plt.savefig("trade.png")#保存成图片plt.show()
实例10.5多列数据绘图#多列数据绘图importmatplotlib.pyplotaspltimportnumpyasnpdata=np.loadtxt('trade.csv',dtype=str,delimiter=',',encoding="utf-8")#切片方法获取三列数据lsx=data[1:,0]lsy1=data[1:,1].astype(float)lsy2=data[1:,2].astype(float)#绘制数据曲线plt.plot(lsx,lsy1,marker='o',linestyle='--',c="blue",linewidth=3)plt.plot(lsx,lsy2,marker='>',linestyle='-.',c="red",linewidth=3)plt.title('2015-2024年中国年进出口总额',fontproperties="SimHei")plt.xlabel(u'年份',fontproperties="SimHei")#加x轴标签plt.ylabel(u'(单位:万亿元)',fontproperties="SimHei")#加y轴标签plt.savefig("trade.png")#保存成图片
plt.show()
实例10.6绘制特定范围的数据曲线文件trade1.csv存储了2000~2024年中国年进出口总额,用户在输入两个年份数值(取值范围为[2000,2024]),要求根据用户输入的范围绘制相关的数据曲线。读取数据的方法与实例10.5相同,由于不能确定用户输入的两个数的大小,需要先比较两个数字,如先输入的年份较大时,交换两个年份,以确保曲线符合常规。实例10.6绘制特定范围的数据曲线#绘制特定范围的数据曲线
#利用NumPy读文件绘制数据曲线importmatplotlib.pyplotaspltimportnumpyasnpdeflocate(x,year):'''返回指定年份在数据集中下标'''xlen=len(x)foriinrange(xlen):if(x[i,0]==year):breakreturn(i)实例10.6绘制特定范围的数据曲线data=np.loadtxt('trade1.csv',dtype=str,delimiter=',',encoding="utf-8")data=data[1:,:]#删除标题行print("文件中有2000年至2024年中国年进出口总额")year_start=input("输入起始年份:")year_end=input("输入终止年份:")if(year_start>year_end):year_start,year_end=year_end,year_start#定位起始年份和终止年份的下标index_start=locate(data,year_start)index_end=locate(data,year_end)实例10.6绘制特定范围的数据曲线#切片方法获取三列数据lsx=data[index_start:index_end+1,0]lsy1=data[index_start:index_end+1,1].astype(float)lsy2=data[index_start:index_end+1,2].astype(float)#绘制数据曲线plt.plot(lsx,lsy1,marker='o',linestyle='--',c="blue",linewidth=3)plt.plot(lsx,lsy2,marker='>',linestyle='-.',c="red",linewidth=3)plt.title('{}-{}年中国年进出口总额'.format(data[index_start,0],data[index_end,0]),fontproperties="SimHei")plt.xlabel(u'年份',fontproperties="SimHei")#加x轴标签plt.ylabel(u'(单位:万亿元)',fontproperties="SimHei")#加y轴标签plt.savefig("trade1.png")#保存成图片
plt.show()5可视化图表柱形图柱形图用于显示一段时间内数据变化或显示各项之间的比较情况。在柱形图中,类别型或序数型变量映射到X轴的位置,数值型变量映射到矩形的高度。通过矩形的高度,我们可以直观地看到各类别之间的数值差异。在绘制柱形图时,可以使用Matplotlib库中的bar()函数,该函数的主要参数与含义如下。matplotlib.pyplot.bar(x,height,width=0.8,bottom=None,*,align='center',data=None,**kwargs)柱形图参数说明:x:数组或列表,柱状图的x轴坐标位置。height:数组或列表,柱状图的高度(即y轴数值)。width:可选参数,柱状图的宽度,默认值为0.8。bottom:可选参数,柱状图底部的y轴坐标,默认从0开始,可用于绘制堆叠柱状图。align:可选参数,柱子与x坐标的对齐方式,'center'(默认,居中对齐)或
'edge'(边缘对齐)。data:可选参数,用于指定数据来源的对象(如DataFrame)。柱形图-实例10.7成绩分布统计现有某班Python课程成绩的分布统计,请用柱形图展示表10.9中的数据。等级优秀良好中等及格不及格人数1024382812#成绩分布柱形图importmatplotlib.pyplotasplt#设置中文字体,确保汉字正常显示plt.rcParams["font.family"]=["SimHei"]#数据x=['优秀','良好','中等','及格','不及格']y=[10,24,38,28,12]#定义每个柱形的颜色colors=['#FF6B6B','#4ECDC4','#45B7D1','#FFA07A','#98D8C8']#创建柱状图plt.bar(x,y,color=colors,edgecolor='black',label=x)#添加标题和标签plt.title('成绩分布图',fontsize=14,pad=15)plt.ylabel('人数')
#显示图形plt.show()饼图饼图英文学名为SectorGraph,常用于统计学模块,2D饼图为圆形。饼图显示一个数据系列中各项的大小与各项总和的比例。饼图中的数据点显示为整个饼图的百分比。图表中的每个数据系列具有唯一的颜色或图案并且在图表的图例中表示。绘制饼图的数据要符合以下特征:①仅有一个要绘制的数据系列。②要绘制的数值没有负值。③要绘制的数值几乎没有零值。④类别数目无限制。⑤各类别分别代表整个饼图的一部分。⑥各个部分需要标注百分比。饼图绘制饼图可以利用pie()函数实现,该函数的主要参数与含义如下:matplotlib.pyplot.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,rotatelabels=False,hold=None,data=None)参数说明:
x:饼图各部分数据,可用列表给出。
explode:需要突出展示的数据位置及突出量,不突出取值为0,突出的数据用一个小数表示。
labels:各部分数据的标签,用列表给出。
labeldistance:文本的位置离原点与半径的比值,1.1指1.1倍半径的位置。饼图绘制饼图可以利用pie()函数实现,该函数的主要参数与含义如下:matplotlib.pyplot.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,rotatelabels=False,hold=None,data=None)参数说明:
autopct:圆里面的文本格式,%2.1f%%表示整数有2位,小数有1位的浮点数。
shadow:是否有阴影,True为有阴影,False无阴影。
startangle:起始角度,0值表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看。
pctdistance:文本离圆心的距离相对半径的百分比。饼图legend()函数可用于给出图例,主要参数有两个:loc,表示图例的位置,包括'upperright','upperleft','lowerright','lowerleft'等;bbox_to_anchor,表示图例与图形之间的距离,当出现图形与图例重叠时,可使用bbox_to_anchor调整图例的位置,这个位置由两个参数决定,第一个参数为图例与左边的距离,第二个参数为与下面的距离。现有某班Python课程成绩的统计数据:'优秀'10人,'良好'24人,'中等'38人,'及格'28人,'不及格'12人;请用饼图展示数据。饼图#成绩分布饼图importmatplotlib.pyplotasplt#数据labels=['优秀','良好','中等','及格','不及格']sizes=[10,24,38,28,12]#设置饼图样式explode=(0,0,0,0,0.2)plt.axes(aspect=1)#设置坐标轴为等比例,确保饼图显示为正圆plt.rcParams['font.sans-serif']=['Simhei']#显示中文plt.pie(sizes,explode=explode,labels=labels,labeldistance=1.1,autopct='%2.1f%%',shadow=True,startangle=90,pctdistance=0.7)plt.title('成绩分布图',fontsize=14,pad=15)plt.legend(loc='upperleft',bbox_to_anchor=(-0.25,1))plt.show()雷达图雷达图(RadarChart),又可称为戴布拉图、蜘蛛网图(SpiderChart),是一种以二维形式展示多维数据的图形。在财务领域应用较多,常用于企业经营状况和财务分析。实例10.8能力测评雷达图某企业对三位新进员工做了相关工作能力评分,三位新员工的各项能力指标平均成绩数据如表,为了更好直观展示三位新员工的工作能力,绘制雷达图对数据进行展示。姓名业务能力解决问题能力沟通能力团队合作能力自我发展能力赵雪9596857391王怀柔7583668573李悦8676829067实例10.8能力测评雷达图#雷达图importnumpyasnpimportmatplotlib.pyplotasplt#从txt文件读取数据dataA=np.loadtxt('work.txt',str,delimiter=',',encoding='utf-8')dataB=dataA[1:,0:]#获取员工姓名和指标数据players=dataB[:,0]categories=dataA[0,1:]numeric_data=dataB[0:,1:].astype(float)max_num=np.amax(numeric_data,axis=0)numeric_data=np.divide(numeric_data,max_num)实例10.8能力测评雷达图#计算角度angles=np.linspace(0,2*np.pi,len(categories),endpoint=False).tolist()#增加首尾相连的点numeric_data=np.concatenate((numeric_data,numeric_data[:,[0]]),axis=1)angles+=angles[:1]cl=['b','g','r']#设置颜色#绘制雷达图fig,ax=plt.subplots(figsize=(8,6),subplot_kw=dict(polar=True))#绘制雷达图线条foriinrange(numeric_data.shape[0]):ax.plot(angles,numeric_data[i],c=cl[i],linewidth=2,label=players[i])plt.rcParams['font.sans-serif']=['Simhei']#显示中文实例10.8能力测评雷达图#添加刻度标签ax.set_xticks(angles[:-1])ax.set_xticklabels(categories)#添加图例ax.legend(loc="lowerright",borderaxespad=-5.5)#设置标题,ax.set_title(label='新进员工工作能力评估',pad=20)#显示图形plt.show()直方图直方图外形和柱形图相似,但两者有着本质区别。直方图:用于展示连续数据的分布情况(例如:全班同学身高的分布区间);柱形图:用于比较不同类别的数据(例如:苹果vs香蕉的销量)。直方图与统计学概念相关,先从数据里找出最大值与最小值,接着确定一个能涵盖所有测量数据的区间,将该区间分成若干小段,统计数据在每个小段中出现的频数M。以测量数据作为横轴坐标,频数M作为纵轴坐标,划分各个小段及其对应频数。在平面直角坐标系内,于X轴标出每组的端点,Y轴表示频数,每个矩形的高度代表相应频数。直方图是一个可以快速展示数据分布的工具,直观、易于理解,在数据分析和处理方面被广泛应用。直方图直方图是以数据组的各个数字为横轴,各个数字在组中出现的次数为纵轴作条形图。直方图可应用hist()函数绘制,其语法结构如下:matplotlib.pyplot.hist(x,bins=None,range=None,density=None,weights=None,
cumulative=False,bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,label=None,
stacked=False,normed=None,hold=None,data=None,**kwargs)参数说明:
x:待绘制直方图的数据。
bins:划分的区间数量,即多少个条形图,需是整数。
normed:布尔型,是否将直方图的频数转换成频率,默认为1。直方图直方图是以数据组的各个数字为横轴,各个数字在组中出现的次数为纵轴作条形图。直方图可应用hist()函数绘制,其语法结构如下:matplotlib.pyplot.hist(x,bins=None,range=None,density=None,weights=None,
cumulative=False,bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,label=None,
stacked=False,normed=None,hold=None,data=None,**kwargs)参数说明:histtype:绘制直方图的类型,其值有'bar'、'barstacked'、'step'、'stepfilled'可选,默认值为'bar'。'bar'是传统的柱型图,多组数据时,水平并列排放。'barstacked'是柱型图,多组数据时,垂直堆叠摆放。'step'是只产生线型轮廓图不填充。'stepfilled'是产生线型轮廓图并以缺省颜色填充。直方图直方图是以数据组的各个数字为横轴,各个数字在组中出现的次数为纵轴作条形图。直方图可应用hist()函数绘制,其语法结构如下:matplotlib.pyplot.hist(x,bins=None,range=None,density=None,weights=None,
cumulative=False,bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,label=None,
stacked=False,normed=None,hold=None,data=None,**kwargs)参数说明:
color:直方图的颜色。
orientation:可为'horizontal'或'vertical',控制直方图方向为水平或竖直,默认为垂直方向。函数返回值是一个含有3个元素的数组:
n:数组或数组的列表,其值为落在每个区间的频度(数量)。bins:一个数组,值为划分的区间的边界数字。patches:用于创建直方图补充参数列表。实例10.9成绩分布直方图现有一个包含学生某门课程考试成绩的数据文件score.txt,请根据该数据文件中的成绩绘制直方图以统计各分数段的人数。实例10.9成绩分布直方图#成绩分布直方图importnumpyasnpimportmatplotlib.pyplotasplt#将文件中的数据读到列表中,并转为浮点数withopen('score.txt','r',encoding='utf-8')asinFile:amount=[float(line.strip())forlineininFile]arrAmount=np.array(amount)#将列表amount转为数组n,bins=np.histogram(arrAmount,10)#n为落在各区间分数数量的列表plt.hist(arrAmount,10,color='blue',edgecolor='red')#edgecolor可用于设定边界颜色#设置轴上刻度plt.xticks(np.arange(0,101,10))plt.yticks(np.arange(0,max(n),10))实例10.9成绩分布直方图#设置轴标签和标题plt.xlabel('成绩',fontproperties="SimHei")plt.ylabel('数量',fontproperties="SimHei")plt.title('成绩分析直方图',fontproperties="SimHei")plt.show()散点图散点图是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势,据此可以选择合适的函数对数据点进行拟合。散点图将序列显示为一组点,值由点在图表中的位置表示,类别由图表中的不同标记表示,通常用于比较跨类别的聚合数据。散点图应用函数绘制,其语法结构如下。scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,edgecolors=None,hold=None,data=None,**kwargs)参数说明:x,y:点的坐标c:颜色marker:标记的样式,默认为圆点edgecolors:轮廓颜色实例10.10身高体重散点图文件“health.csv”中保存有某校某一年级学生身高和体重的数据,第1列为性别,“1”代表男生,“2”代表女生,第2和3列分别为身高和体重的数据,绘制身高和体重的散点图,男生和女生用不同标记区分。实例10.10身高体重散点图#身高体重散点图importmatplotlib.pyplotaspltimportnumpyasnpdata=np.loadtxt('health.csv',delimiter=',',encoding='utf-8')#读取数据,用逗号','分隔#分别取出男生和女生身高和体重两列数据boyheight=data[:,1][np.where(data[:,0]==1)]#男生数据boyweight=data[:,2][np.where(data[:,0]==1)]girlheight=data[:,1][np.where(data[:,0]==2)]#女生数据girlweight=data[:,2][np.where(data[:,0]==2)]#在同一个画布上绘图plt.figure()ax=plt.subplot(111)p1=ax.scatter(boyheight,boyweight,c='b',marker=(5,1))p2=ax.scatter(girlheight,girlweight,c='g')实例10.10身高体重散点图#x,y取值范围设置plt.xlim(105,160)plt.ylim(15,50)#设置title和x,y轴的labelplt.legend((p1,p2),(u'boy',u'girl'),loc='upperleft')plt.title("身高和体重",fontproperties="SimHei")plt.xlabel("身高",fontproperties="SimHei")plt.ylabel("体重",fontproperties="SimHei")plt.show()等高线图等高线图,是用数值相等各点联成的曲线(即等值线)在平面上的投影来表示被摄物体的外形和大小的图。等高线是用于连接各类等值点(如温度、降雨量、污染或大气压力)的线。线的分布显示表面值的变化方式。值的变化量越小,线的间距就越大;值上升或下降得越快,线的间距就越小。Matplotlib中用contour()函数绘制等高线,函数的主要参数与含义如下:contour([X,Y,]Z,[levels],**kwargs)参数说明:
X,Y:坐标位置,可选参数,若缺省的话,那Python根据传入的高度数组(Z)的大小自动生成的(X,Y)坐标)。
Z:代表每个坐标对应的高度值,是一个二维数组,其中每个值表示的是每个坐标对应的高度。
Level:可选参数,有两种参数值可选。设定一个整数,这个整数表示你想绘制的等高线的条数。设定一个包含高度值的一维数组,这样Python便会画出传入的高度值对应的等高线。实例10.11绘制方程的等值线图绘制方程
的等高线实例10.11绘制方程的等值线图#绘制方程的等值线图importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlibmatplotlib.rcParams['axes.unicode_minus']=False#显示负数的符号位deff(x,y):return(1-x**5+y**5)*np.exp(-x**2-y**2)n=256x=np.linspace(-3,3,n)y=np.linspace(-3,3,n)X,Y=np.meshgrid(x,y)plt.contourf(X,Y,f(X,Y),18,alpha=.15)#填充等值线,alpha为透明度,15%C=plt.contour(X,Y,f(X,Y),18,colors='blue')#绘制等值线,线颜色blueplt.clabel(C,inline=1,fontsize=8)plt.show()词云词云也叫文字云,是一种应用广泛的数据可视化方法,它会过滤掉文本中大量的低频信息,对出现频率较高的“关键词”予以视觉化的展现。词云使得浏览者扫一眼文本就可以捕获文本的主旨。在Python中可导入wordcloud库,借助wordcloud库制作词云。wordcloud库是由C++编译的,pipinstallwordcloud时可能会提示缺少编译环境的错误,一种解决方法是先安装C++编译环境再安装wordcloud;更简单的方法是直接下载预编译好的wheel文件直接安装。安装
pipinstallwordcloud
1.5.0
cp38
cp38m
win_amd64.whl、#安装:wordcloud1.5.0cp38cp38mwin_amd64.whl实例10.12英文词云制作根据文本文件“Alice.txt”内容制作英文词云。①英文文本单词间以空格分隔,因此制作英文文本词云较为简便,只需将读取的文本文件对象作为参数传给WordCloud()的generate()函数即可。②默认词云的背景是黑色的,下面示例里把背景色改为白色。实例10.12英文词云制作
制作英文词云fromwordcloudimportWordCloudimportmatplotlib.pyplotasplt#读取文件,返回一个字符串withopen('Alice.txt','r',encoding='utf-8')astxt:text=txt.read()#生成一个词云对象wordcloud=WordCloud(background_color="white",#设置背景为白色,默认为黑色width=1500,#设置图片的宽度height=960,#设置图片的高度margin=5,#设置图片的边缘max_words=50#设置显示高频单词数量).generate(text)plt.imshow(wordcloud)#绘制图片plt.axis("off")#消除坐标轴wordcloud.to_file('english_ciyun.png')#保存图片plt.show()#展示图片词云上述程序代码中WordCloud()函数的一些关键参数解释如下:font_path:字体文件其所在路径,默认是None,在英文词云中可以不用设置;若要显示中文词云,则需要明确指定字体及其路径,否则无法正常显示中文字符。width:生成词云画布的宽(默认400)。height:生成词云画布的高(默认400)。margin:生成词云画布的词边距(默认2)。mask:背景图片,默认为None,参数是nd-array类型;当mask不为None时width和height无效,被mask的形状替代;除了白色块(#FF或#FFFFFF),mask其他部位会被作为填充单词的区域。max_words:词云中词的最大数量,默认为200。min_font_size:词云的字体大小的最小值,默认为4。stopwords:停用词集合,默认为None;当为None时,会默认调用wordcloud库内建的STOPWORDS。词云random_state:该参数会在color_func参数中被调用,默认为None;实际上的作用是作为随机数的种子。background_color:词云背景色,默认为black(黑色)。max_font_size:最大字体大小,默认为None;当为None时,图像的高度将会被作为最大字体大小。mode:默认值为RGB;当mode=’RGBA’且background_color为None时会生成透明的背景。relative_scaling:词频和字体大小的关联性,影响字号的大小,默认值为0.5。中文词之间并无分隔,这使得制作中文词云有些麻烦,需先对文本做分词处理。jieba属于第三方库,需先下载安装包,然后依照以下步骤来完成安装。①进入jieba官网:jieba·PyPI,下载jieba包。②把下载好的安装包解压,复制在anaconda软件pkgs文件夹里。③在jieba文件夹路径下输入cmd,进入命令行模式。④输入
pythonsetup.pyinstall
即可完成安装。或是通过国内镜像网站来安装,在anacondaprompt中输入命令:pipinstall-i
/simplejieba词云jieba是目前应用较广泛的一个中文分词库,可以导入jieba利用它进行分词再绘制词云。jieba分词有三种模式:精确模式(默认)、全模式和搜索引擎模式。importjiebatxt='宝剑锋从磨砺出,梅花香自苦寒来。'print(jieba.lcut(txt))#精确模式print(jieba.lcut(txt,cut_all=True))#全模式print(jieba.lcut_for_search(txt))#搜索引擎模式输出:['宝剑锋','从','磨砺','出',',','梅花香','自苦寒','来','。']['宝剑','宝剑锋','剑锋','从','磨砺','出',',','梅花','梅花香','花香','自苦','自苦寒','苦寒','来','。']['宝剑','剑锋','宝剑锋','从','磨砺','出',',','梅花','花香','梅花香','自苦','苦寒','自苦寒','来','。']精确模式的可以准确的分词;全模式时,输出所有可能组合的词,冗余较多;搜索引擎模式是精确分词,再对长词进一步切分。一般情况下,推荐使用精确模式。实例10.13中文词云制作根据文本文件“2025年政府工作报告.txt”的内容制作中文词云。中文词之间无分隔,所以中文词云的制作略麻烦,需要提前对文本进行分词处理。jieba不是anaconda里面自带的库,所以需要自己在jieba官网下载安装包并完成安装。制作中文词云时,务必要明确指定中文字体,否则中文无法正确显示。实例10.13中文词云制作#中文词云importjiebaimportmatplotlib.pyplotaspltfromwordcloudimportWordCloudtxt=''#创建一个空字符串withopen("2025年政府工作报告.txt","r",encoding='utf-8')asfile:forlineinfile:#遍历文件对象,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理技能提升自我
- 护理查房:危重患者病情评估与支持
- 护理质量改进工具与实施方法
- 心包积液患者的抗生素使用护理
- 卖东西签销售合同
- 慢性胃炎的护理安全管理
- (正式版)DB22∕T 2485-2016 《朝鲜族服饰 第2部分:男服》
- 2026年黔东南黄平县直事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 2026年制造配送审计评估协议
- 2026年黑龙江大庆市肇州县人才引进44人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年科学中考热点试题及答案
- 2026年液氢储罐液位测量技术应用
- 第11课 少年当自强(课件) 小学道德与法治二年级下册
- (二检)2026年宝鸡市高三高考模拟检测(二)历史试卷
- 《智能土木工程材料》课件 第1、2章 智能土木工程材料概述、形状记忆合金
- 2026年春季学期“凝心聚力冲刺高考”高三年级工作总结:精准备考冲刺理想大学
- 2025年湖南高考语文试题及答案
- 全面同工同酬申请书
- 吊车拆除铁塔专项施工方案(模版)
- 2025年1月浙江省普通高中学业水平考试思想政治试卷(含答案详解)
- DB50∕T 1886-2025 特殊健康状态儿童预防接种服务规范
评论
0/150
提交评论