【文档说明】Python基础与大数据应用第十一章-Python可视化和可视化工具课件.pptx,共(64)页,2.897 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2411.html
以下为本文档部分文字说明:
第十一章Python可视化与可视化工具北京西普阳光教育科技股份有限公司中国IT教育解决方案专家2018年10月制作:丁辉1目录Contents01Python可视化与可视化工具简介02pandas基本图形绘制03matplotlib交互式绘图0405070406matplotl
ib.pyplot的使用项目训练小结2Python可视化与可视化工具01数据可视化概述数据可视化是以图形或图表的形式展示数据。数据可视化后,可以更加直观地帮助人们快速地理解数据,发现数据的关键点。数据可视化技术是关于数据视觉表现形
式的科学技术研究。主要指的是较为高级的技术方法,而这些技术方法允许利用图形、图像处理、计算机视觉以及用户界面,通过表达、建模以及对立体、表面、属性以及动画的显示,对数据加以可视化解释。Python语言有丰富的、功能强
大的、第三方库的支持,在数据可视化方面具有较强的功能。45数据可视化对于数据描述以及探索性分析至关重要,恰当的统计图表可以更有效的传递数据信息。在Python中已经有很多数据可视化方面的第三方库,例如:Matplotlib、pandas、Seaborn、ggplot、Bokeh、pyga
l、geoplotlib等。⚫matplotlib是一个Python绘图库,已经成为Python中公认的数据可视化工具,通过matplotlib可以很轻松地画一些或简单或复杂地图形,几行代码即可生成折线图、直方图、条形图、散点图等,使用方便简单。⚫p
andas库的应变得更加普及,它的身影经常见于市场分析、金融分析以及科学计算中。作为数据分析工具的集大成者,pandas作者曾说,pandas中的可视化功能比matplotlib的子库pyplot更加简便和功能强大。
通常情况下pandas就足够应付全部的可视化工作了。⚫Seaborn是基于matplotlib产生的一个模块,专攻于统计可视化,可以和pandas进行无缝链接,使初学者更容易上手。相对于matplotlib,Seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系。⚫HoloVi
ews是一个开源的Python库,可以用非常少的代码行完成数据分析和可视化,除了默认的matplotlib后端外,还添加了一个Bokeh后端。Bokeh提供了一个强大的平台,通过结合Bokeh提供的交互式小部件,可以使用HTML5canvas和WebGL快速生成交互性和高维可视化,非常适合于数据的
交互式探索。⚫Altair是Python一个公认的统计可视化库。它的API简单、友好、一致,并建立在强大的vega-lite(交互式图形语法)之上。AltairAPI不包含实际的可视化呈现代码,而是按照vega-lite规范发出JSON数据结构。由此
产生的数据可以在用户界面中呈现,这种优雅的简单性产生了漂亮且有效的可视化效果,且只需很少的代码。可视化工具简介6⚫PyQtGraph是在PyQt4/PySide和numpy上构建的纯Python的GUI图形库。它主
要用于数学、科学、工程领域。尽管PyQtGraph完全是在Python中编写的,但它本身就是一个非常有能力的图形系统,可以进行大量的数据处理,数字运算;使用了Qt的GraphicsView框架优化和简化了工作流程,
实现以最少的工作量完成数据可视化,且速度也非常快。⚫ggplot是基于R的ggplot2和图形语法的Python绘图系统,实现了更少的代码绘制更专业的图形。它使用一个高级且富有表现力的API来实现线、点等元素的添加,颜色的
更改等不同类型可视化组件的组合或添加,而不需要重复使用相同的代码,然而这对那些试图进行高度定制的用户来说,ggplot并不是最好的选择,尽管它也可以制作一些非常复杂、好看的图形。ggplot与pandas紧密联系。如果你打算使用ggplot,最好将
数据保存在DataFrames中。⚫Bokeh是一个Python交互式可视化库,支持现代化web浏览器展示(图表可以输出为JSON对象、HTML文档或者可交互的网络应用)。它提供风格优雅、简洁的D3.js的图形化样式,并将此功能扩展到高性能交互的数据集、数
据流上。使用Bokeh可以快速便捷地创建交互式绘图、仪表板和数据应用程序等。Bokeh能与NumPy、Pandas、Blaze等大部分数组或表格式的数据结构完美结合。⚫pygal是一种开放标准的矢量图形语言,它基于XML(ExtensibleMarkupLanguage),可以生成多个输出格式
的高分辨率Web图形页面,还支持给定数据的HTML表导出。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并且可以插入到HTML中通过浏览器来观看。⚫VisPy是一个用于交互式科学可视化的Python库,快速、可伸缩、且易于使用,是一个高性
能的交互式2D/3D数据可视化库,利用了现代图形处理单元(gpu)的计算能力,通过OpenGL库来显示非常大的数据集。⚫NetworkX是一个Python包,用于创建、操纵和研究复杂网络的结构、以及学习复杂网络的结构、功能及其动力学。NetworkX提
供了适合各种数据结构的图表、二合字母和多重图,还有大量标准的图算法,网络结构和分析措施,可以产生随机网络、合成网络或经典网络,且节点可以是文本、图像、XML记录等,并提供了一些示例数据(如权重,时间序列)。NetworkX测试的代
码覆盖率超过90%,是一个多样化,易于教学,能快速生成图形的Python平台。可视化工具简介7⚫Plotly的Pythongraphinglibrary在网上提供了交互式的、公开的,高质量的图表集,可与R、Python、Matlab等软件对接
。它拥有在别的库中很难找到的几种图表类型,如等值线图,树形图和三维图表等,图标类型也十分丰富,申请了API密钥后,可以一键将统计图形同步到云端。但美中不足的是,打开国外网站会比较费时,且一个账号只能创建25个图表,除非你升级或删除一些图表。⚫folium是一个建立在Python系统之上
的js库,可以很轻松地将在Python中操作的数据可视化为交互式的单张地图,且紧密地将数据与地图联系在一起,可自定义箭头、网格等HTML格式的地图标记。该库还附有一些内置的地形数据。⚫Gleam允许你只
利用Python构建数据的交互式,生成可视化的网络应用。无需具备HTMLCSS或JaveScript知识,就能使用任一种Python可视化库控制输入。当创建一个图表的时候,可以在上面加上一个域,让任何人都可以实时地玩转你的
数据,让你的数据更通俗易懂。⚫Vincent是一个很酷的可视化工具,它以Python数据结构作为数据源,然后把它翻译成Vega可视化语法,并且能够在D3.js上运行。这让你可以使用Python脚本来创建
漂亮的3D图形来展示你的数据。Vincent底层使用pandas数据,并且支持大量的图表:条形图、线图、散点图、热力图、堆条图、分组条形图、饼图、圈图、地图等等。⚫Python-igraph是Python界面的igraph高性能
图形库,主要针对复杂的网络研究和分析。⚫Mayavi2是一个通用的、跨平台的三维科学数据可视化工具。可以在二维和三维空间中显示标量、向量和张量数据。可通过自定义源、模块和数据过滤器轻松扩展。Mayavi2也
可以作为一个绘图引擎,生成matplotlib或gnuplot脚本,也可以作为其它应用程序的交互式可视化的库,将生成的图片嵌入到其它应用程序中。可视化工具简介8⚫geoplotlib是Python的一个用于地理数据可视化和绘制地图的工具箱,并提供了一个原始数据和所有可视化之间的基本接口,
支持在纯Python中开发硬件加速的交互式可视化,并提供点映射、内核密度估计、空间图、泰森多边形图、形状文件和许多更常见的空间可视化的实现。除了为常用的地理数据可视化提供内置的可视化功能外,geoplotli
b还允许通过定义定制层来定义复杂的数据可视化(绘制OpenGL,如分数、行和具有高性能的多边形),创建动画。⚫Basemap和Cartopy包支持多个地理投影,并提供一些可视化效果,包括点图、热图、等高线
图和形状文件。PySAL是一个由Python编写的空间分析函数的开源库,它提供了许多基本的工具,主要用于形状文件。但是,这些库不允许用户绘制地图贴图,并且对自定义可视化、交互性和动画的支持有限。⚫Leat
her适用于现在就需要一个图表并且对图表是不是完美并不在乎的人。它可以用于所有的数据类型,然后生成SVG图像,这样在调整图像大小的时候就不会损失图像质量。这个库很新,一些文档还没有最后完成。图像成品非常基础——但是这就是设计目标。⚫missingno用图像的方式让你能
够快速评估数据缺失的情况,而不是在数据表里面步履维艰。可以根据数据的完整度对数据进行排序或过滤,或者根据热度图或树状图来考虑对数据进行修正。⚫Python有很多不同的可视化工具,选择一个正确的工具有时是一种挑战。如果你想做一些专业的统计图表,推荐你使用Seabor
n、Altair;数学、科学、工程领域的学者就选择PyQtGraph、VisPy、Mayavi2;网络研究和分析方面,NetworkX、Python-igraph会是一个不错的选择;地理投影就选geoplotlib、folium;评估数据缺失就选missingno;有了HoloVie
ws再也不用为高维图形犯愁;如果你不喜欢花俏的修饰,那就选择Leather。如果你是一名新手matplotlib、pandas会很好上手。⚫本章将重点讲解matplotlib以及pandas的绘图功能,这也是现在最为常用、最为稳健,同时功能也非常丰富的
数据可视化解决方案。可视化工具简介pandas基本图形绘制02拆线图10折线图是二维图,由(x,y)坐标确定相应的点,然后将这些点依次连接起来,就形成了折线图。折线图通常用来表示数据变化的趋势,一般是随
时间变化的趋势。(1)绘图准备此处主要做的是基本库导入,主要是pandas、numpy、matplotlib、matplotlib.pyplot库的导入。在脚本文件的开头包含以下导入语句或者交互模式依次执行以下语句:importnumpyasnpi
mportpandasaspdimportmatplot.pyplotasplt后面将直接使用这些库,不再重复导入了。(2)由Series类型数据生成折线图使用Series.plot()方法创建折线图①创建
Series对象>>>s=pd.Series(np.random.rand(100))#随机产生100个0~1之间的服从正态分布样本②绘制折线图>>>s.plot()③显示所绘图形>>>plt.show()值在0~111拆线图Series.plot()方法参数很多,使用h
elp(pd.Series.plot)列出Series.plot()方法所有的参数为:“self,kind=‘line’,ax=None,figsize=None,use_index=True,title=None,grid=None,legend=False,style=None
,logx=False,logy=False,loglog=False,xticks=None,yticks=None,xlim=None,ylim=None,rot=None,fontsize=None,colormap=None,table=False,yerr=None,
xerr=None,label=None,secondary_y=False,**kwds”。具体见下表。参数说明label用于图例的标签ax要在其上进行绘制的matplotlibsubplot(子图)对象。如果没有设置,则使用当前matplotlibsubplot
style传给matplotlib的风格的字符串(如’ko–’),图形对象显示样式kind可以是’line’、‘bar’、‘barh’、‘kde’、’hist’、’box’、’density’、’area’、’pie’,表示
图的类型logy在Y轴上使用对数标尺use_index逻辑值,默认用索引做x轴rot旋转刻度标签(0-360)xticks设置x轴刻度的值,序列形式yticks设置Y轴刻度的值,序列形式xlimX轴的范围,列表或元组ylimY轴的范围,列表或元组grid显示轴网格线figsiz
e元组表示的图的尺寸,单位为英寸fontsize坐标轴刻度值的字号title图表的标题table逻辑值,为True时,显示数据表格legend逻辑值,为True时,显示图例colormap设置图区域的颜色secondary_y逻辑值,为True时,y轴在图的右侧
loglog逻辑值,同时设置x,y轴刻度是否取对数**kwds关键字参数,将选项传递给matplotlibplotting方法12拆线图style参数,表示传给matplotlib风格的字符串(如“ko–”),其中“k”位置表示的是线条颜色,对于线条颜色的种类还有以下
几个细分:别名bgrcmykw全名BlueGreenRedCyanMagentaYellowBlackWhite“o”位置表示折线每个点的表现形式,“o”表示实心圆点,“x”表示x型点;“-”位置表示线型,“-”表示实线,“–”表
示短划线,“-.”表示点划线,“:”表示虚线。也可将这三者表示形式分开,写法如:series.plot(linestyle='dashed',color='k',marker='o')④重绘折线图>>>s.plot(legend=True,title='linepic
ture',style=’bo-‘)#增加了图例、标题、线形颜色>>>plt.show()图标题图例13拆线图(3)由DataFrame类型数据生成折线图使用DataFrame.plot()方法创建折线图①创建DataFrame对象>>>d
f=pd.DataFrame(np.random.randn(100,2),index=range(100),columns=list('AB'))>>>df=df.cumsum()#累积值,使图有区分②绘图>>>df.plot(use_index=True,title=”D
ataFramepicture”)③显示图形>>>plt.show()14拆线图每个columns列绘制一条折线,用不同的图例进行区别。DataFrame.plot()方法除了与Series.plot()方法相同的参数外,还有一些参数见下表。参数说明subpl
ots逻辑值,为True时,将各个DataFrame列绘制到单独的subplot(子图)中sharex如果subplots=True,则共用同一个X轴,包括刻度和界限sharey同上legend添加一个图例到subplot(默认为True)sort_columns以字母表顺序绘制各列,默认
使用前列顺序另外,DataFrame.plot()方法的“kind”参数多了两种类型的图,即“scatter”和“hexbin”。④改变参数,重绘>>>df3=pd.DataFrame(np.random.randn(10,2),
columns=['B','C']).cumsum()#累积值>>>df3['A']=pd.Series(list(range(len(df3))))#增加一列“A”#x轴为“A”列,创建子图,图类型为柱状图>>>df3.plot(subplots=True,kind='bar',x=
'A')15柱状图>>>s=pd.Series(np.random.randn(10),index=list("abcdefghij"))>>>s.plot(kind='barh',alpha=0.5)#水平柱图>>>plt.show()水平柱状图1
6柱状图柱状图又称长条图、条图、条状图、棒形图,是一种以长方形的长度为变量的统计图表,由一系列高度不等的纵向长方形表示数据分布的情况,用来比较两个及以上的价值(不同时间或者不同条件),只有一个变量,通常用于较小的数据集分析。柱状图亦可横向排列,或用多维方式表达。
柱状图展示的是数值对比关系,可以通过柱状的长度表现哪些类别高,哪些类别低等情况。pandas中绘制柱状图可以用DataFrame.plot.bar()或Series.plot.bar()绘制,也可在DataFrame.plot()或Series.plot(
)方法中使用“kind=’bar’”参数设置进行绘制。示例如下:>>>s=pd.Series(np.random.randn(10),index=list("abcdefghij"))>>>s.plot(kind='bar',alpha=0.5)#alpha表示透明度,取值范围是0~1>>>plt
.axhline(0,color='k')#在y=0处绘一条黑色的直线>>>plt.show()垂直柱状图17柱状图>>>df=pd.DataFrame(np.random.rand(6,4),index=['one','two','three'
,'four','five','six'],columns=pd.Index(['A','B','C','D'],name='Genus'))>>>df.plot.bar()>>>plt.show()图例设置了X轴刻度18柱状图>>>df=pd.DataF
rame(np.random.rand(10,4),columns=['a','b','c','d'])>>>df.plot.bar(stacked=True,use_index=True)#叠加>>>plt.show()堆叠19直方图直方图(histogram)是一种可以对值
的频率进行离散化显示的柱状图。数据点被拆分到离散的、间隔均匀的面元中,绘制的是各面元中数据点的数量。直方图描述的是分类统计结果,即数据分布情况,一般用横轴表示数据类型,纵轴表示分布情况。pandas中绘制直方图
可以用DataFrame.plot.hist()或Series.plot.hist()绘制,也可在DataFrame.plot()或Series.plot()方法中使用“kind=’hist’”参数设置进行绘制。#随机生成1~5
之间的整数100个>>>data=pd.Series(np.random.randint(low=1,high=5,size=100))#生成直方图,蓝色,带图例,x轴为0~5>>>data.plot.hist(color='b',xti
cks=range(6),legend=True)>>>plt.show()20直方图>>>df4=pd.DataFrame({'a':np.random.randn(100)+1,'b':np.random.randn(100),},c
olumns=['a','b'])#透明度为0.5,bins为显示的柱子数目,本例分为30个区段,x轴为-3~4>>>df4.plot.hist(subplots=True,alpha=0.5,bin
s=30,xticks=range(-3,4))>>>plt.show()21散点图散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本。在回归分析中,散点图是数据点在直角坐标系平面上的分布图,表示因变量随自变量而变化的大致
趋势,据此可以选择合适的函数对数据点进行拟合。pandas中用DataFrame.plot.scatter()或DataFrame.plot(kind=’scatter’,…)方法来绘制。散点图的绘制就是在图上绘制(x,y)对应的点
。示例如下:>>>df=pd.DataFrame(np.random.rand(50,2),columns=['a','b'])#x轴“a”列,y轴为“b”列,s指定点的大小,为“b”列值的50倍>>>df.plot.scatter(x='a',y
='b',s=df['b']*50)>>>plt.show()散点图必须指定“x”和“y”参数22散点图>>>df=pd.DataFrame(np.random.rand(50,4),columns=['a','b','c
','d'])#在单个轴上绘制多个列组,要用重复指定目标轴的绘图方法#建议再指定颜色和标签关键字来区分每个组#“a”&“b”,指定目标轴,三个图都绘制在一个目标轴上>>>ax=df.plot.scatter(x='a',y='b',color=
'DarkBlue',label='Group1')>>>df.plot.scatter(x='a',y='d',color='r',label='Group2',ax=ax)>>>df.plot.scatter(x='a',y='c',color='k'
,label='Group3',ax=ax)>>>pltshow()23面积图面积图又称区域图,强调数量随时间而变化的程度,也可用于引起人们对总值趋势的注意。堆积面积图和百分比堆积面积图还可以显示部分与整体的关系。pandas中可以使用
Series.plot.area()和DataFrame.plot.area()或Series.plot(kind=’area’,…)和DataFrame.plot(kind=’area’,…)创建面积图。>>>df=pd
.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])#不堆叠,选取“a”、“b”两列画图>>>df[['a','b']].plot.area(subplots=Tr
ue,stacked=False)>>>plt.show()24饼图饼图显示一个数据系列中各项的大小与各项总和的比例,可以直观地比较各项的比例。pandas中用Series.plot.pie()和DataFrame.plot.
pie()或者是Series.plot(kind=’pie’,…)和DataFrame.plot(kind=’pie’,…)来绘制。>>>s=pd.Series(np.random.rand(4),index=['a','b',
'c','d'],name='series')>>>s.plot.pie(figsize=(6,6))#设置图的尺寸为6x6英寸,这样饼图是圆的>>>plt.show()25饼图>>>s=pd.Series(np.random.r
and(4))>>>s.plot.pie(labels=['AA','BB','CC','DD'],colors=['r','g','b','c'],autopct='%.2f',fontsize=15,figsize=(6,6))>>>plt.show()26饼图>>>
df=pd.DataFrame(np.random.rand(4,2),index=['a','b','c','d'],columns=['x','y'])>>>df.plot.pie(subplots=True,figsize=(6,3))>>>plt.
show()27饼图如果所有值的总和小于1.0,则绘制扇形饼图>>>series=pd.Series([0.1]*4,index=['a','b','c','d'],name='series2')>>>series.p
lot.pie(figsize=(6,6))>>>plt.show()28密度图密度图是表现与数据值对应的边界或域对象的一种理论图形表示方法。点密度图用点(数)来表现与数据值对应的边界或域对象。一个域对象中点的总个
数代表了域对应的数据值。如果某县有10,000个高级市民,每个点代表100位高级市民,在这个县的界线内将会有100个点。对于每个点可以代表很大数值的原始数据,用点密度图是非常适合的。例如人口、快餐店个数、某种商标的碳酸水的提供商个数等。其实密度图,可利用数值出现
频率绘制的直方图进行曲线拟合,会得到密度图;绘制的图形是根据直方图得到的条状分布的顶点连接后得到的平滑曲线,X轴是DataFrame中的数值分布,Y轴是密度(Density)。pandas中用Series.plot.den
sity()和DataFrame.plot.density()方法、Series.plot(kind=’density’,…)和DataFrame.plot(kind=’density’,…)方法、Series.plot.kde()和DataFram
e.plot.kde()方法、Series.plot(kind=’kde’,…)和DataFrame.plot(kind=’kde’,…)方法绘制。>>>s=pd.Series([1,2,2.5,3,3.5,4,5,3,3,5,4,4,5,6,5,4,6,3,2,5,4
,3,5])>>>s.plot.density()>>>plt.show()29密度图>>>length=pd.DataFrame({'length':[10,20,15,10,1,12,12,12,13,13,13,14,14,14,51,5
1,51,51,51,4,4,4,4],"high":[23,45,67,43,44,34,54,22,3,4,3,45,34,43,43,5,54,32,21,32,12,32,43]})>>>length.plot(kind=’kde’)>>>plt.s
how()matplotlib交互绘图03概述31matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建各种类型的2D图表和一些基本的3D图表。它支持输出多种格式的图形图像,并且可
以使用多种GUI界面库交互式地显示图表。matplotlib可用于Python脚本、Pythonshell、iPython等开发环境,其子模块pyplot提供了经典Python编程接口。本节主要介绍交互式绘图模式。matplotlib绘图基础321.导入子模块:importmatplo
tlib.pyplotasplt。2.创建画布:fig=plt.figure()。3.添加分区:ax=fig.add_subplot(311)。关于分区(子图),是这样的规则。整个画布可以等分为m行n列个子区域,然后按照从左到右,从上到下的顺序对每
个子区域进行编号,左上的子区域编号为1。如果行、列和子图数这三个数都小于10,可以把它们缩写为一个整数,例如(323)和(3,2,3)是相同的。如fig.add_subplot(311)表示分成3行1列,占用第1个位置,即添加到第1行第1列的子区域中,fig.add_subplot
(222)表示分成2行2列,占用第2个位置,即添加到第1行第2列的子区域中。4.设置x轴最小、最大值,y轴最小、最大值:ax.axis([-5,5,0,1])。5.添加标题:plt.title('thisisatitle')。6.坐标轴添加标题:plt.xlabel('x')、plt
.ylabel('y')。7.显示图形:plt.show()。8.画图:ax.scatter(x,y)matplotlib交互绘图331.交互绘图模式的基本命令①打开交互绘图模式:plt.ion()②关闭交互绘图模式:plt.ioff()③清当前坐标轴:plt.cla()④清除所有子
图:plt.clf()⑤关闭画布(窗口):plt.close()2.绘图>>>importmatplotlib.pyplotasplt>>>importnumpyasnp>>>importpandasaspd>>>plt.ion()#打开交互模式>>>fig=plt.figure(
figsize=(10,10))#创建画布,尺寸为10x10>>>ax=fig.add_subplot(2,2,1)#添加子图1>>>s=pd.Series(20*np.random.rand(10))#把随机数放大20倍>>>s.plot(ax=ax,
color='r',linestyle='--')matplotlib交互绘图34>>>ax=fig.add_subplot(222)#添加子图2>>>s.plot.bar()#画柱图matplotlib交互绘图35>>>ax=fig.add_subplot(223)#添加子图3>>>df.
plot.scatter(x='x',y='y',ax=ax)#绘制散点图>>>ax=fig.add_subplot(224)#添加子图4>>>s.plot.pie(ax=ax)#绘制饼交互绘图模式操作过程中,如果当前子图所绘图形
有误,可以用plt.cla()方法清除所绘图形,可以用plt.clf()方法清除画布所有子图,用plt.close()方法关闭当前画布。退出交互绘图模式,用plt.ioff()方法。36【例11-1】在交互绘图模式下模
拟某物体的运行轨迹。#ch11_1.pyimportmatplotlib.pyplotaspltimportnumpyasnpimportmathplt.close()#关闭窗口fig=plt.figure()ax=fi
g.add_subplot(1,1,1)ax.axis("equal")#设置图像显示的时候xy轴比例相同plt.grid(True)#添加网格plt.ion()#打开交互模式IniObsX=0000#设置x的初始值IniObsY=4000#设置y的初始值IniObsAngle=135#初
始角度IniObsSpeed=10*math.sqrt(2)#初始速度print('开始仿真')try:fortinrange(50):#某物体的运行轨迹obsX=IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.
pi)*tobsY=IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*tax.scatter(obsX,obsY,c='b',marker="*")#散点图plt.pause(0.5)#延时0.5秒exceptEx
ceptionaserr:print(err)matplotlib交互绘图matplotlib.pyplot的使用04pyplot绘图基础38matplotlib的pyplot子库提供了很多绘图API,方便用户快速绘制2D图表。matplotl
ib.pyplot是命令行式函数的集合,每一个函数都对图像作了修改,比如创建图形,在图像上创建画图区域,在画图区域上画线,在线上标注等。39importnumpyasnpimportpandasaspdimportmatplot.pyplotas
plt绘图准备pyplot绘图基础1.plt.plot()方法plt.plot()方法是一个基本的绘制折线方法。常用的格式如下:plot([x],y,[fmt],**kwargs)#画单条折线plot([x],y,[fmt],[x2],y2,[fmt2]
,...,**kwargs)#画多条折线[x],y:用于画线的点。[x]省略时,默认从0开始;[fmt]:格式字符串,按颜色、点标记和线型顺序组合,如“ro.”,当然也可分别用“linestyle='.',color=
'r',marker='o’”关键参数格式表示。颜色、线型同6.2.1中所讲的颜色和线型;点的标记有“.”表示实心的点,“o”表示空心的点,“v”表示倒三角形,“^”表示正三角形等共22种;**kwargs:用来设置图形属性的选项,如“linewidth=2”表示线宽为2,“alpha=0.
5”表示透明度为0.5等。随着使用的需要,不断熟悉多种选项参数,也可用help(plt.plot)查看。40pyplot绘图基础2.其它属性设置方法⚫设置图的标题:plt.title('Myfirstplot',fontsize=20,fontname='T
imesNewRoman'),定义图表的标题为“Myfirstplot”,并设置标题的字号和字体。⚫设置x轴标签:plt.xlabel('counting',color='gray'),定义x轴标签为“counting”,颜色为gray。⚫设置y轴标签:pl
t.ylabel('Squarevalues',color='gray'),同上。⚫设置显示文本:plt.text(5,0.5,'$y=sin(x)$',fontsize=20,bbox={'facecolor':'yellow','a
lpha':0.2}),在图(5,0.5)位置添加“y=sin(x)”文本,并设置文本的字号,并将文本放入文本框。text()方法支持放在两个$符号之间的数学表达式。⚫设置网格线:plt.grid(True),“True”表示显示网格线。⚫设置图例
:plt.legend(['First','Second','Third'],loc=1),loc是图例放置位置,默认值为1即图表的右上角。当图表中有多个序列线条时,图例的顺序要与调用plot()函数顺序一致。⚫保存图表:plt.savefig('/usr/
plot.png'),图表以png的格式保存到usr目录下,方便其它文件使用这个图表。但是需要注意的是savefig()函数需要放在生成图表的一系列命令最后,否则会得到一个空白的文件。⚫设置绘图区域:plt.subplot(211)。⚫设置x,y轴的比例:plt.axis('eq
ual')。41pyplot绘图基础【例11-2】pyplot绘图样例。#ch11_2.pyimportmatplotlib.pyplotaspltimportnumpyasnpplt.grid(True)x=np.arange(0,5,0.1)y1=np.sin(x)y2=n
p.sin(x+4)plt.subplot(211)plt.plot(x,y1,'b-')plt.legend(['Firsts'],loc=1)plt.subplot(212)plt.plot(x,y2,'g^')plt.le
gend(['Seconds'],loc=1)plt.savefig('/usr/plot.png')plt.show()42pyplot绘图基础【例11-2】pyplot绘图样例。#ch11_2.pyimportmatplotlib.pyplotaspltimportnumpyasnpplt.
grid(True)x=np.arange(0,5,0.1)y1=np.sin(x)y2=np.sin(x+4)plt.subplot(211)plt.plot(x,y1,'b-')plt.legend(['Firsts'],loc=1)plt.subplot(212
)plt.plot(x,y2,'g^')plt.legend(['Seconds'],loc=1)plt.savefig('/usr/plot.png')plt.show()柱图43【例11-3】随机生成7个0~100之间的值作为”星期一~星期天”的值,绘制
柱状图。#ch11-3.py#coding:utf-8importmatplotlib.pyplotaspltimportnumpyasnpimportmatplotlibasmpl#显示中文,设置中文字体zhfont1=mpl.fon
t_manager.FontProperties(fname='/usr/share/fonts/truetype/arphic/ukai.ttc')#windows环境用此语句显示中文#mpl.rcParams[self.defaultFamily[fontext])]=['simpliFi
ed']x=np.arange(7)data=np.random.randint(0,100,7)colors=np.random.rand(7*3).reshape(7,3)#随机生成7种颜色组合labels=['星期一'
,'星期二','星期三','星期四','星期五','星期六','星期天']plt.title("星期图",fontproperties=zhfont1)plt.xticks(x,labels,fontproperties=zhfont1)plt.bar(x
,data,alpha=0.8,color=colors)plt.show()plt.barh()方法是绘制水平柱状图直方图44pyplot用于绘制直方图的方法为hist(),该方法除了绘制直方图外,还以元组形式返回直方图的计算结果。它能够接收一系列样本个体和期望的分组数量作为参数,会把
样本范围分成多个区间,然后计算每个区间所包含的样本个体的数量。hist()原型如下:hist(x,bins=None,range=None,density=None,weights=None,cumu
lative=False,bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,lab
el=None,stacked=False,normed=None,hold=None,data=None,**kwargs)⚫x:输入的数据,可以为一个序列数,也可以多组;⚫bins:直方图中分组个数;⚫range:指定分组区间的上下限,默认为(x.min(),x.max(
)),若bins为序列,range失效;⚫density:决定hist()方法返回值的第一个输出元组n。如果为True,直方图面积和为1,频数/(总数*组距);如果为False,返回的是频数;⚫normed:决定直方图y轴取值是落在某个面元中
元素的个数(normed=False或normed=0),还是某个面元中元素的个数占总体的百分比(normed=True或normed=1);⚫cumulative:为True即计算累计频数或频率。即cumulative=True,density=True时,计算累
计频率;⚫bottom:如果是标量,每个bin的基线位置都平移相同的单位。如果是与分组区间数长度相同的列表,则每个bin的基线都独立地平移独立的单位,默认为0;⚫histtype:表明画出的图形状,可以是“bar”、
“barstacked”、“step”、“stepfilled”;⚫align:设置画的bar是以什么为中心,可以是“left”、“mid”、“right”;⚫rwidth:控制每个bar的宽度。⚫weights:权重,与x的形状一致;⚫barstacked,表示有多个分组的直
方图时,是否堆叠放置;⚫log:控制y坐标是否使用科学计数法;⚫orientation:直方图是垂直还是水平的,可以是“horizontal”、“vertical”。hist()的返回值:⚫n:数组或数组列表每一个bar区间的数量或者百分比;
⚫bins:数组,bar的范围和bins参数含义一样;⚫patches:列表或者列表的列表,图形对象。直方图45【例11-4】随机生成一个序列作为样本,画出它的直方图。把随机生成的100个0~100之间的样本数据作为参数
传递给hist()方法,创建一个直方图,指定直方图中有20个面元。#eg11_4.pyimportmatplotlib.pyplotaspltimportnumpyasnpdata=np.random.randint(0,100,100)n,bins,patches=plt.hist(dat
a,bins=20)print(data)print(n)print(bins)print(patches)plt.show()[4391746928279688196225624398799371044744247224755442584
518874883992618690756625094303460935349469523658205768796554693789690688517652031487976751781159698643594014531953798461454222279697698][6.5.5.5.
4.4.4.3.8.6.5.4.6.3.3.4.3.8.6.8.][4.8.7513.518.2523.27.7532.537.2542.46.7551.556.2561.65.7570.575.2580.84.7589.594.2599.]<alistof20Patchobject
s>直方图46【例11-5】多种参数组合的直方图示例。#ch11_5.pyimportnumpyasnpimportmatplotlibimportmatplotlib.mlabasmlabimportmatplotlib.pyplotaspltimportra
ndombottom=[1,1,2,3]data=[]random.seed(123456)forxinrange(20):data.append(random.randint(1,5))np.random.seed(20180408)weight=np.random
.rand(20)ax=plt.subplot(331)plt.hist(data,bins=4,histtype='bar',rwidth=0.8)ax.set_title("bins=4,histtype='bar',rw
idth=0.8")ax=plt.subplot(332)plt.hist(data,bins=5,rwidth=0.1)ax.set_title(“bins=5,rwidth=0.1“)ax=plt.subplot(333)ax.set_title("bins=5,rwi
dth=0.3,density=True")plt.xlabel(u'数量',fontsize=4)plt.ylabel(u'占比',fontsize=4)n,edgeBin,patches=plt.hist(data,bins=5,rwidth=0.3,density=Tr
ue)#n,edgeBin,patches=plt.hist(data,bins=5,histtype='bar',rwidth=0.8)print(n)print(edgeBin)ax=plt.subplot(334)ax.set_title("bins=5,
rwidth=0.3,density=True,weights=weight")n,edgeBin,patches=plt.hist(data,bins=5,rwidth=0.3,density=True,weights=weight)#n,edgeBin,patches=plt.his
t(data,bins=5,rwidth=0.3,weights=weight)print(n)print(edgeBin)ax=plt.subplot(335)ax.set_title("bins=
4,rwidth=0.3,bottom=bottom")plt.hist(data,bins=4,rwidth=0.3,bottom=bottom)ax=plt.subplot(336)ax.set_title("bins=4,rwidth=0
.3,histtype='stepfilled'")#plt.hist(data,bins=4,rwidth=0.8,histtype='barstacked')#plt.hist(data,bins=4,rwidth=0.8,histtype='step')plt.hist(data,bi
ns=4,rwidth=0.3,histtype='stepfilled')直方图47colors="rgmbc"ax=plt.subplot(337)ax.set_title("bins=4,rwidth=0.3")n,edgeBi
n,patches=plt.hist(data,bins=4,rwidth=0.3)random.seed()forpatchinpatches:patch.set_facecolor(random.choice(colo
rs))label="Label"ax=plt.subplot(338)ax.set_title("bins=4,rwidth=0.3,label=label")plt.hist(data,bins=
4,rwidth=0.3,label=label)plt.legend(fontsize=12)ax=plt.subplot(339)ax.set_title("bins=4,rwidth=0.3,log=True,cumulative=Tr
ue")n,edgeBin,patches=plt.hist(data,bins=4,rwidth=0.3,log=True,cumulative=True)print(n)print(edgeBin)fig=plt.gcf()fig.set_size_inches(12,10)fig
.savefig("hist.png")plt.show()[0.56250.31250.18750.1250.0625][1.1.82.63.44.25.][0.496802880.389099360
.135998360.135992920.09210648][1.1.82.63.44.25.][9.14.17.20.][1.2.3.4.5.]饼图48绘制饼图,用pie()方法。pie()原型如下:pie(x,explode=None,labels=None,co
lors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=N
one,textprops=None,center=(0,0),frame=False,rotatelabels=False,hold=None,data=None)⚫x:指定绘图的数据;⚫explode:指定饼图某些部分
的突出显示,即呈现爆炸式;⚫labels:为饼图添加标签说明,类似于图例说明;⚫colors:指定饼图的填充色;⚫autopct:自动添加百分比显示,可以采用格式化的方法显示;⚫pctdistance:设置百分比标签与圆心的距离;⚫sha
dow:是否添加饼图的阴影效果;⚫labeldistance:设置各扇形标签(图例)与圆心的距离;⚫startangle:设置饼图的初始摆放角度;⚫radius:设置饼图的半径大小;⚫counterclock:是否让饼图按逆时针顺序呈现;⚫wedg
eprops:设置饼图内外边界的属性,如边界线的粗细、颜色等;⚫textprops:设置饼图中文本的属性,如字体大小、颜色等;⚫center:指定饼图的中心点位置,默认为原点;⚫frame:是否要显示饼图背后的图框,如果设
置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置。饼图49【例11-6】随机生成7个值代表一个星期每一天的值,绘制一个星期的饼图。#ch11_6.pyimportmatplotlib.pyplotaspltimp
ortnumpyasnpimportmatplotlibasmpl#显示中文设置zhfont1=mpl.font_manager.FontProperties(fname='/usr/share/fonts/truetype/arphic/ukai.t
tc')data=np.arange(1,8)labels=['星期一','星期二','星期三','星期四','星期五','星期六','星期天']colors=np.random.rand(7*3).reshape(7,-1)#随机生成每一块的颜色代码explode=[0.5
,0,0,0,0,0,0]plt.pie(data,labels=labels,textprops={'fontsize':12,'color':'black','fontproperties':zhfont1},colors=c
olors,startangle=0,autopct='%1.2f%%',explode=explode,shadow=True)plt.axis('equal')plt.show()散点图50散点图由一些散乱的点组成的图,由其x值和y值确定其位置。利用散点
图可以展示数据的分布和聚合情况。使用scatter()方法来绘制散点图。scatter()原型如下:scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,vmax=N
one,alpha=None,linewidths=None,verts=None,edgecolors=None,hold=None,data=None,**kwargs)⚫x,y:输入数据,长度相同的序列;⚫c:颜色序列;⚫s:设置点的大
小;⚫marker:设置点的形状;⚫cmap:指定色图,只有当c参数是一个浮点型的数组时才起作用;⚫norm:设置数据亮度,标准化到0~1之间,使用该参数仍需要c为浮点型的数组;⚫linewidths:设置线宽;⚫edgeco
lors:设置点的边缘颜色;⚫vmin,vmax:亮度设置,与norm类似,如果使用了norm则该参数无效。散点图51【例11-7】散点图示例。#ch11_7.pyimportmatplotlib.pyplotaspltim
portnumpyasnpimportmatplotlibasmplzhfont1=mpl.font_manager.FontProperties(fname='/usr/share/fonts/true
type/arphic/ukai.ttc')plt.figure(figsize=(9,6))n=1000x=np.random.randn(1,n)y=np.random.randn(1,n)c=np.random.randn(1
,n)plt.title('散点图',fontproperties=zhfont1)plt.xlabel('x值',fontproperties=zhfont1)plt.ylabel('y值',fontproper
ties=zhfont1)plt.grid(True)plt.scatter(x,y,s=50*y,c=c,alpha=0.4,marker='o',vmin=1,vmax=1000,linewidths=3,edgecolors="red")plt.show()箱线图52
箱线图又称箱形图或盒式图。在不明确数据分析的目标时,对数据进行一些探索性的分析,通过箱线图可以知道数据的中心位置,发散程度以及偏差程度。使用boxplot()方法绘制箱形图。【例11-8】基本箱线图的示例。#ch11_8.pyimportnumpyasnpim
portmatplotlib.pyplotaspltimportpandasaspds=np.random.rand(15)*20#把数据扩大20倍plt.boxplot(s)print(s)plt.show(
)[5.391493246.7703543213.2174980513.223700217.177212560.731327460.234854644.7138568614.758472262.151712
611.867726182.9883708417.855461568.372233578.56542829]下边缘Q1,表示最小值;下四分位数Q2,等于该样本中所有数值由小到大排列后的第25%的数字;中位数Q3,等于该样本中所有数值由小到大排列后的第50%的
数字;上四分位数Q4,等于该样本中所有数值由小到大排列后的第75%的数字;上边缘Q5表示最大值。Q4-Q2为四分位差,上边缘和下边缘是距离中位数1.5倍四分位差的线,即Q5=Q4+1.5(Q4-Q2),Q1=Q2-1.5(Q4-Q2)。如果有数字落在上下边缘之外,则称之为异常值。箱线图
53boxplot()原型为:boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,patch_artist=None,bootstrap=None,us
ermedians=None,conf_intervals=None,meanline=None,showmeans=None,showcaps=None,showbox=None,showfliers=None,boxprops=None,labels=None,flie
rprops=None,medianprops=None,meanprops=None,capprops=None,whiskerprops=None,manage_xticks=True,autorange=False,zorder=None,hold=None,data=N
one)⚫x:指定要绘制箱线图的数据;⚫notch:是否是凹口的形式展现箱线图,默认非凹口;⚫sym:指定异常点的形状;⚫vert:是否需要将箱线图垂直摆放,默认垂直摆放;⚫whis:指定上下边缘与上下四分位的距离,默认为1.5倍的四分位差;⚫positions:指定
箱线图的位置,默认为[0,1,2…];⚫widths:指定箱线图的宽度,默认为0.5;⚫patch_artist:是否填充箱体的颜色;⚫meanline:是否用线的形式表示均值,默认用点来表示;⚫showmeans:是否显示均值,默认不显示;⚫showcap
s:是否显示箱线图顶端和末端的两条线,默认显示;⚫showbox:是否显示箱线图的箱体,默认显示;⚫showfliers:是否显示异常值,默认显示;⚫boxprops:设置箱体的属性,如边框色,填充色等;⚫labels:为箱线图添加标签,类似于图例的作用;⚫fi
lerprops:设置异常值的属性,如异常点的形状、大小、填充色等;⚫medianprops:设置中位数的属性,如线的类型、粗细等;⚫meanprops:设置均值的属性,如点的大小、颜色等;⚫capp
rops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;⚫whiskerprops:设置须的属性,如颜色、粗细、线的类型等。箱线图54【例11-9】二维数据绘制箱线图。#ch11_9.pyimportnumpyasnpimportmatpl
otlib.pyplotaspltimportpandasaspdnp.random.seed(2)#设置随机种子#生成0-50之间的5*4维度数据df=pd.DataFrame(np.random.rand(5,4)*50,columns=['A','B','C','D'])print(df)
#输出初始数据df=df.T#转置,以用于生成箱线图print(df)#输出转置结果plt.boxplot(x=df,showmeans=True,patch_artist=True,whis=3,labels=[
'A','B','C','D'])plt.show()ABCD021.7997451.29631227.48312421.766120121.01839016.51674110.23243230.963548214.98273413.34136431.05669226.45710536.72
899725.6789069.22199339.266757442.69876524.71184242.3280743.98227401234A21.79974521.01839014.9827346.72899742.698765B1.29631216.
51674113.34136425.67890624.711842C27.48312410.23243231.0566929.22199342.328074D21.76612030.96354826.45710539.2667573.982274A、C组分布偏左,B组偏右A、D组数据
比较集中A组含有异常值C组数据的离散程度最大项目训练—电影数据信息分析05通过对电影文件(dianying.csv)中电影票房、导演票房、电影类型、导演与电影类型等的统计与图的生成,综合运用文件读取、pandas数据处理和matplotlib图形功能,全面掌握Python程序设计与数据处理
方法,具备大数据处理的基本能力。训练目标训练内容1.CSV文件信息读取;2.数据清洗;3.数据统计;4.图形输出。电影数据信息分析训练步骤①项目分析电影文件(dianyig.csv)中包含有“电影名称”、“
上映时间”、“下线时间”、“公司”、“导演”、“主演”、“类型”、“票房”、“城市”信息。首先读取全部信息并去重;然后抽取需要的信息并进行去空处理;再对抽取的干净信息进行统计分析;最后生成相应的图。电影数据信息分析②项目实施步骤⚫读取文件信息去重,保存
成DataFrame格式;⚫抽取信息并进行去空、规范化处理;⚫分别对电影票房、导演票房、电影类型、导演与电影类型进行统计;⚫根据统计信息,生成相应图形,并对统计信息进行初步的分析。③编写程序#ch11_p_1.pyimportnumpyasnpimpo
rtpandasaspdimportmatplotlib.pyplotaspltimportmatplotlibasmpl#设置中文标签的显示zhfont1=mpl.font_manager.FontProperties(fname='/usr/share/fo
nts/truetype/arphic/ukai.ttc')训练步骤③编写程序#数据清洗并获取有效数据defget_data(path):#读取数据film_data=pd.read_csv(path,delimiter=';',encoding='utf8',names=['电影名称','上线时
间','下线时间','公司','导演','主演','类型','票房','城市'])#去重film_data=film_data.drop_duplicates().reset_index().drop('index',axis=1)#选择需要的列,并去空film_data=fil
m_data[['电影名称','导演','类型','票房']].dropna()#对电影类型进行处理film_data['类型']=film_data['类型'].str.strip()film_data['类型']=film_data['类型'].s
tr[0:2]#取前2个字符代表类型#获取票房列数据,去除")",并转换成浮点数film_data['票房']=film_data['票房'].str.split(')',expand=True)[1].astype(np.float64)prin
t(film_data)#调试用的,查看中间处理结果returnfilm_data#取得清洗后的数据,注意文件的位置data=get_data('dianying.csv')#对电影的票房进行求和fi
lm_box_office=data.groupby(data['电影名称'])['票房'].sum()#将统计结果的Series格式转换为DataFrame,并按降序排序film_box_office=film_box_office.reset_ind
ex().sort_values(by='票房',ascending=False)#取票房前5名的film_box_office_5=film_box_office.head()#输出统计结果print(fi
lm_box_office_5)#调试用的,查看中间处理结果电影数据信息分析训练步骤③编写程序#对电影类型进行计数film_type=data.groupby(data['类型'])['电影名称'].
count().reset_index()#将“电影名称”列改为“小计”film_type.rename(columns={'电影名称':'小计'},inplace=True)print(film_type)#调试用的,查看中间处理结果#对导演的票房进行统计,并按降序排
列director_box_office=data.groupby(['导演'])['票房'].sum().reset_index().sort_values(by='票房',ascending=False)director_box_office
_5=director_box_office.head()print(director_box_office_5)#调试用的,查看中间处理结果#对导演所导电影类型进行统计director=data.groupby(['导演'
,'类型'])['票房'].count().reset_index()#将“票房”改为“小计”director.rename(columns={'票房':'小计'},inplace=True)print(director)#调试用的,查看中间处理结果#画图fig=plt.figure(figsi
ze=(15,15))#创建画布ax_1=fig.add_subplot(2,2,1)#添加子图ax_2=fig.add_subplot(2,2,2)ax_3=fig.add_subplot(2,2,3)ax_4=fig.add_subplot(2,2,4)电影数据信息分析训练步骤③编写
程序#票房前五的电影ax_1.set_title("票房总计",fontproperties=zhfont1)#ax_1.set_xlabel('电影名称',fontproperties=zhfont1)ax_1.set_ylabel('万元',fontproperties=zhfont
1)ax_1.set_xticklabels(film_box_office_5['电影名称'],fontproperties=zhfont1,rotation=15)#文字显示旋转15度ax_1.bar(film_box_o
ffice_5['电影名称'],film_box_office_5['票房'])#电影类型统计ax_2.set_title("电影类型统计",fontproperties=zhfont1)ax_2.pie(fil
m_type['小计'],labels=film_type['类型'],textprops={'fontsize':12,'color':'black','fontproperties':zhfont1},autopct='%1.2f%%',sh
adow=True)#导演票房前五的统计ax_3.set_title("导演票房总计",fontproperties=zhfont1)ax_3.set_xlabel('导演',fontproperties=zhfont1
)ax_3.set_ylabel('万元',fontproperties=zhfont1)ax_3.set_xticklabels(director_box_office_5['导演'],fontproperties=zhfont1)ax_
3.bar(director_box_office_5['导演'],director_box_office_5['票房'])#导演与类型统计ax_4.set_title("导演与电影类型统计",fontproperties=zhfont1)ax_4.set_xticklabels(d
irector['导演'],rotation=90,fontproperties=zhfont1)#文字显示旋转90度ax_4.set_yticklabels(director['类型'],fontproperties=zhfont1)#点的大小
由分类统计的数量决定ax_4.scatter(director['导演'],director['类型'],s=director['小计']*50,edgecolors="red")plt.show()#显示图形电影数据信息分析训练步骤④调试程序请填写表1-1的项目训练
小结训练小结电影数据信息分析由于程序代码比较长,所以采用分段调试的方法,从上往下进行调试。上述代码中,在分段调试的地方,已经添加了相应的print()(加粗倾斜)语句,用于查看处理结果是否是期望的值。图形的输出,同样采
用分图形进行调试,即每添加一个子图,进行调试,获得期望的图形后再添加另一个子图,直到所有的图形输出是所期望的,才能结束调试。本项目最后的输出如下图所示。从票房统计图可以看到,票房排名前五的依次是《天将雄狮》、《恶棍天使》、《百团大战》、《前任2:备胎反击战》、《
万物生长》;从电影类型统计结果看,喜剧片数量最多,爱情片次之,剧情片第三;从导演的票房统计发现,李仁港导演的电影票房最多,邓超和俞白眉次之,宁海强和张玉中排第三;从导演与电影类型统计图可以看到,张承导演的喜剧片最多,金依萌/潘安子/章家瑞/宋迪导演的喜剧片次之,李玉导演的爱情片最多。小结061
.绘制直线𝑦=5x+1.8,要求设置x、y轴坐标,并标注直线方程。2.绘制y=sin(3x)/x的曲线。3.分别用pandas和matplotlib.pyplot的相应方法绘制sin(x)、cos(x)、tan(x)、ctan(c)在0~2π的曲线,并绘制在一个画布上。4.
对本班同学一学期的成绩进行分析。要求:1计算总分并按总分的降序排序之后用柱形图进行输出;2用箱线图对每门课的成绩进行分析;3对某门课按每隔10分一个分数段进行统计,将统计结果用饼图进行输出。5.对电影文件(dianying.csv)按“城市”统计票房,并画图输出统计结果。6.常用的直方图、条状
图、饼图、散点图等,这些图分别应用在什么情况下,表达哪类信息比较恰当?7.比较pandas和matplotlib.pyplot的绘图功能,各有什么优势?小结63THANKS!64