ae如何ae修改时间总长字符秒数?

*如图所示:要达到这种使“蜜蜂”(Bee.ai)的透明度随“表盘”(Switch.ai)的旋转而变化的效果,在时间线窗口,应该为“蜜蜂”(Bee.ai)的不透明度属性添加什么表达式?A.thisComp.layer("Bee.ai").rotation/5B.thisComp.layer("Switch.ai").rotationC.thisComp.layer("Switch.ai").rotation/5D.thisComp.layer("Bee.ai").rotation*在After Effects 的摄像机设置面板中,Focus Distance决定A.镜头的焦点位置B.镜头的快门尺寸C.聚焦效果的模糊程度D.镜头的可视范围*在书写表达式的时候,我们会遇到不同类型的数值,这些数值分为不同维度,以下对数值的维度的分类正确的组有哪些?A.一维数值:缩放比例(%)旋转的角度(°)、透明度(%)B.二维数组:缩放比例[x=长度,y=宽度],位置[x,y]C.三维数组:3D 层的缩放比例和位置属性D.四维数组:颜色[R,G,B,A]*下列哪些文件可以带有三维通道信息?*使用路径工具绘制遮罩时,产生控制点后,按住Shift键拖动鼠标,A.控制点方向线可以沿水平移动B.控制点方向线可以沿垂直移动C.控制点方向线可以沿45度角度移动D.控制点方向线可以沿30度角度移动*下面对于视频扫描格式的叙述正确的是:A.NTSC 制的场频高于PAL 制B.NTSC 制的场频低于PAL 制C.NTSC 制的行频高于PAL 制D.NTSC 制的行频低于PAL 制*使用笔刷工具绘图时,笔刷的持续方式有哪些?A.ConstantB.Write OnC.Single FrameD.Custom*After Effects 6.5 生成的文件是否可以由After Effects 6.0 打开?A.既不可以打开,也不可以导入B.不可以打开,但可以导入C.可以打开,但不可以导入D.完全支持*在缺省情况下,Pre-compose操作产生的新Comp的时间长度为:A.原Comp的时间长度B.在新Comp内所有素材中时间最长一个的长度C.在新Comp内所有素材中时间最短一个的长度D.在进行Pre-compose操作时自己定义*视频编辑中,最小单位是?*如果要查找Project窗口内的某个素材在操作系统中的具体存放位置,需要的操作是:A.点击Project窗口中的Find a project item图标,进行搜索B.Windows中右键(mac osx下Ctrl+鼠标)点击需要查找的素材,并选择Reveal in ExplorerC.选中素材,并选择菜单命令Edit>Edit Original命令D.选中素材,按下Ctrl + E 快捷键*在使用笔刷绘制时,需要同时设置Paint笔刷大小,应该按住热键?B.CtrlC.Shift*对于“场”下面说法不正确的是:A.所有的视频文件都带有场B.只有通过逐行扫描视频设备采集的文件才带有场C.通过DV1394采集的视频文件总是上场优先(Upper Field First)D.通过DV1394采集的视频文件总是下场优先(Lower Field First)*Set Matte特效同下列哪个效果类似?A.Track MatteB.Transfer ModeC.Set ChannelD.Matter Chorker*如图所示:如何产生图中的边缘腐蚀效果?A.Brush StrokesB.GlowC.ScatterD.Roughen Edges*可以使用其他图层的亮度信息作为划像方式的特效是:A.Block DissolveB.Radial WipeC.Iris WipeD.Gradient Wipe如图所示:在运动追踪调板中,可以设置追踪的方式及其各项参数,以下对于操作运动追踪调板的描述正确的是:*A.使用Analyze 的4 个按钮,我们不但可以正反两个方向的分析追踪的结果,还可以逐帧进行运动追踪的分析B.不但可以使用运动追踪调板右上角的Stabilize Motion 按钮对影片进行稳定处理,还可以在Track Type 的下拉菜单中选择Stabilize 模式,来对影片进行稳定处理C.在追踪类型为Parallel Corner Pin 的前提下,点击Edit Target 按钮,在弹出的对话框中的目标层可以同Motion Source 目标层设置为同一层D.在追踪类型为Raw 的前提下,Edit Target 按钮不可用*以下哪些操作可以改变层的Alpha通道?A.调节层的不透明度B.在文字层继续输入文字C.用钢笔工具在层上绘制MaskD.用钢笔工具在层上绘制开放的路径如图所示:在After Effects 中,为文字制作类似放大镜掠过文字的文字波动效果(区域文字放大),需要对其Range Selector 的什么属性设置关键帧?*A.只需对Start 属性设置关键帧B.需要对End 和Offset 属性设置关键帧C.只需对Offset 属性设置关键帧D.需要对Start、End和Offset 三个属性分别设置关键帧*After Effects 中,每层画面最多能加多少个打开或关闭的mask?A.128个B.256个C.512个*下面的哪个特效可以对影片产生拖尾效果?A.Fast BlurB.Time DifferenceC.EchoD.Motion Tile如图所示:为了保护已经做好的图层,防止误操作的发生,应该打开图层的哪个开关?*对于一个物体,在打开“M”开关后哪种操作会产生Motion Blur运动模糊?A.对物体进行Position位移动画B.对物体进行Scale缩放动画C.对物体进行Rotation旋转动画D.对物体进行Opacity透明度动画*以下关于用关键帧设置工作区域的说法正确的是:A.B键可以将工作区域的起始端设在时间指针的所在位置B.N键可以将工作区域的结束端设在时间指针的所在位置C.选择一个或多个层,Ctrl+Alt+B 可以使工作区域自动适应层的位置D.当没有选择任何层的时候,Ctrl+Alt+B 可以设定工作区域为整个合成区域*使用以下哪种方法可以选择多个Mask?A.Ctrl+Shift+选择工具B.Ctrl+Alt+选择工具C.Alt+ Shift+选择工具D.Ctrl+Alt+ Shift+选择工具*在After Effects 里,对于音频(Audio)特效组中的特效描述正确的是:A.Backwards 特效可以将声音从结束关键帧播放到开始关键帧,以实现反向播放声音的效果B.Base&Treble 特效可帮助调节音频层音调,提升或降低声音的高低频部分,当Base 和Treble 的参数都设置为“-100”时,声音完全消失C.High-Low Pass 特效只允许声音的高音和低音部分通过,而滤掉声音的指定频率D.Stereo Mixer 特效可以混合音频层的左右声道,并且产生从一个声道到另一个声道的完整的音频信号*在何种状态下,应用的Vector Paint 效果会按实际绘制时间,实时进行回放:A.To Current FrameB.To Sequential FrameC.In RealtimeD.Continusly*After Effects 为我们提供了4 种灯光类型,以下对这4 种灯光的性质描述正确的是:A.Parallel(平行光):Parallel 从一个点发射一束光线照向目标点,平行光提供了一个无限远的光照范围,可以照亮场景中处于目标点上的所有对象,光照强度会随着距离的增加而减弱Spot(聚光灯):Spot 从一个点向前方以圆锥形发射光线,聚光灯会根据圆锥角度确定照射的面积B.Point(点光):Point 从一个点向四周发射光线,随着对象离光源的距离不同,受光程度也不同,由近至远光照衰减C.Ambient(环境光):Ambient 没有光线发射点,它可以照亮场景中的所有对象,但是环境光无法产生投影*对象层的3D开关被打开后,系统会自动在对象层上显示三维坐标,以下对3D层的三维坐标描述准确的是:A.红、绿、蓝色的坐标分别代表3D 层的X、Y、Z 轴B.用选择工具在3D 层的某一个轴上进行拖拽时,只会改变这个3D 层在这个轴方向的位移值,而不会改变其它属性C.摄像机同3D 层一样都具有三维坐标,可以在三维空间对其进行操作D.灯光同3D 层一样都具有三维坐标,可以在三维空间对其进行操作*Inner/Outer Key至少必须几个Mask才能使用?*在Project窗口中,素材的哪个信息不能显示:A.NameB.TypeC.In /out PointD.Duration*在After Effects 中,给当前图层的Scale属性添加一个关键帧的热键是:A.Alt+SB.Ctrl+SC.Alt+Shift+SD.Alt+Ctrl+S*After Effects处理大尺寸图像或电影片断的快速有效的方法为:A.把图像或电影片断的尺寸缩小B.使用代理(Proxy )C.在Composition Setting中设置较小的分辨率(Resolution),当电影编辑完成后再将分辨率恢复到所需要的大小D.把图像或电影片断的尺寸放大*下面关于灯光描述正确的有:A.Parallel灯光可以照亮场景中的所有对象B.Parallel灯光随距离远近而衰减C.Spot灯光从一个点向前方以圆锥形发射光线D.Spot灯光无法产生投影*在After Effects里,对于声音频谱(Audio Spectrum)和声波(Audio Waveform)这两个特效与音频(Audio)特效组的区别是:A.可以对音频层直接施加声音频谱(Audio Spectrum)和声波(Audio Waveform)这两个特效B.可以对音频层直接施加音频(Audio)特效组中的特效C.可以对固态层施加声音频谱(Audio Spectrum)和声波(Audio Waveform)这两个特效D.可以对固态层直接施加音频(Audio)特效组中的特效*下列哪些Keying通过亮度来进行抠像?A.Linear Color KeyB.Difference MatteC.ExtractD.Luma Key*如果要对时间线窗口下当前时间指示器后的音频预演,要按下:A.主键盘区的回车键B.主键盘区的“0”键C.小键盘区的“0”键D.小键盘区的“.”键在After Effects中创建一个三维合成。并且把场景中的3D Layer进行Pre-Compose(重组)。对重组后的层使用Camera Tool进行操作,使其在三维场景中随摄像机变化,应该进行下面哪个操作?*PAL制的电视节目,使用下列哪种Pixel Aspect Ratio(像素宽高比)?C.1.07*为Particle指定一个Property Mapper,指定的Map应用Effect产生躁波效果。要使用其躁波效果影响粒子,应该对该层做下列哪种操作?A.对该层进行Pro-ComposeB.直接指定即可,不需要其他操作C.删除该层的特效D.指定的Map必须在当前Comp中如图所示:在After Effects 中,运动路径的形式与其插值方式对应准确的是:*A.线性插值B.连续贝塞尔插值C.自动贝塞尔插值D.贝塞尔插值*在跟踪控制面板内,对视频图像做画面稳定处理时,需要选择跟踪的类型是:A.StabilizeB.TransformC.Parallel corner pinD.Perspective corner pin*在中国通用的电视制式是以下哪一种A.NTSCC.SECAMD.HDTV*对于PAL制式的文件,正确设置pixel Aspect ratio (像素比),以下哪个是正确的A.D1/DV NTSC (0.9)B.HDV1080/Dvcpro HD(1.33)C.DVCPRO HD 1080 (1.5)D.D1/DV PAL(1.07)*下列哪个快捷键是设置After Effects内存渲染的?A.数字键1B.数字键2C.数字键3D.数字键0*关于层的基本属性设置,以下哪个不包含其中?D.颜色变化层位移属性通过以下哪个进行调节?*展开层中所有关键帧的属性快捷键是?A.按键盘上EB.按键盘上DC.按键盘上UD.按键盘上M*下列哪个是制作运动捕捉动画?A.在时间轴直接插入位移关键帧B.1)打开window /Motion sketch 2)start capture 3) 然后再画面中画出想要的路径C.先在第一帧插入关键帧,最后一帧插入关键帧 再中间插入关键帧调点D.以上方法都可以*关于PAL制式的文件,描述正确的?A.25fpsB.30fpsC.24fpsD.12fps*After Effects通过特效菜单中文字选项可以设置几种文字类型?下列哪个选项可以实现快放?打开哪个按扭能使画面在播放时更流畅?*通过何种设置可实现 A物体跟随B物体的运动方式?B.建立父子关系C.插关键帧D.做捕捉动画*制作羽化边框,以下方法正确的是?A.导入一张带羽化的图片B.用矩形画一个遮罩, 按ctrl+shif+I并在mask属性下对maskfeather进行设置。C.画一个矩形框,然后调整透明度D.画一个矩形,加一个模糊的效果*以下哪个较适合用color key进行抠像?D.简单静态图片的背景*按下大写锁定键后?A.素材更新,其它不变B.层更新,其它不变C.层和合成图像窗口更新,其它不变D.所有素材.层.合成图像窗口都停止更新*哪一个特效可制成版画效果?A.CurvesB.color BalanceC.ThresholdD.channel Mixer*如何对项目窗口所选素材进行重命名操作?A.按键盘上回车键B.按键盘上空格键C.双击所选素材D.右键单击重命名*After Effects 中同时能有几个工程(Project)处于开启状态?A.可以有2 个及以上的工程B.只能有1 个C.可以自己设定D.只要有足够的空间,不限定项目开启的数目*在Vector Paint特效中,能记录动画的是下列哪种回放模式?A.Hold strokesB.Past strokesC.Animate StrokesD.Current frame*在After Effects中交互式预览里又包含了哪些?A.Use wireframe Interactions while altB.Use Dynamic ResolutionC.DegradationD.Interactive Previews*在After Effects 中如何预览电影?A.用鼠标指针在Time Layout 面板中的标尺上拖拉B.在Time Controls 面板中点按Play 钮C.用Composition/Preview 命令来控制D.点按Composition 视窗底部的三角按钮*下列哪些可以作为After Effects素材导入?A.photoshop文件B.premiere文件C.Illustrator文件D.flash*除了bmp以外,还有哪些图片的格式能被After Effects认别?A.JPGE*在After Effects 中,下列菜单命令可以达到删除素材目的的有:A.File>Remove Unused FootageB.File>Consolidate All FootageC.File>Reduce ProjectD.Edit>Clear*哪些信息是用来识别通道格式的?A.Z DepthB.UV CoordinatesC.CoverageD.Alpha*改变当前合成窗口的时间,下列哪些方法可以用?A.Composition >Composition SettingsB.Composition >Background ColorC.按快捷键 Ctrl +KD.Layer >Layer Setting如图所示,下列这个图标用在哪些方面?*A.三维图层B.合成项目图层D.矢量文件图层*After Effects中常用蒙板类型有哪几种?A.矩形蒙版B.不规则蒙板C.椭圆形蒙版D.Bezier蒙版*after effects的层分哪几种类型?A.摄像机层、灯光层B.素材层、固态层、文本层、合成图像层C.虚拟物体层*在After Effects 中可以采用如下哪种方式输入文字?A.使用Basic Text 特效B.使用Path Text 特效C.使用Paint 特效D.使用Text 文本层*在After effects中 Effect/Render/FractalNoise特效可以做出以下哪些效果?B.背景底纹*After Effects可以输出哪几种格式?B.图片序列C.QuickTime movieD.Mpeg-2*以下哪种行为属于增加关键帧A.对某属性的几个关键帧应用thesmootherB.对某属性的两个不相邻关键帧应用thewiggleC.使用animation>add keyframeD.对两个不相邻关键帧的mask shape属性关键帧应用保持缺省的参数smart mask interpolation*After Effects通常使用16bit色深度进行工作*After Effects Previews设置中包含了两类: wireframe Preview和Audio Preview*对合成项目进行渲染的快捷键Ctrl+K*After Effects只可以导入视频和图片After Effects导入Png序列文件只要在PNG Sequence 前面打勾,就能完整导入。*导入素材的方法除了可以通过 file/import/file 、还可以在项目窗口直接双击打开素材*直接按F3可以打开所选层的特效控制窗口*After Effects水平翻转可以通过scale(大小)改成-100%,100 %实现*After Effects中进行项目渲染的的热键是ctrl +M*在After Effects中处理影片快速、慢速播放的调节问题,可以通过 Layer/time/EnableTime Remapping来进行调整*通过Effect—generate—vegas可以生成描边效果。*建立父子关系层的数量必须大于或等于二*After Effect不可以将一个层指定为摄像机或灯光的父层如图After Effect自带插件可以做出水波纹的特效*快捷键O可以快速的回到所选图层的最后一帧。*拍蓝屏或绿屏可以不是专用的蓝色(PANTONE2735)或绿色(PANTON354)*在particle Playground中可通过编辑加农文字实现粒子文字特效。*After Effect中只有三维图层才可以做父子关系*通常用color Range来抠半透明的东西*路径文字只能做圆形、Bezier曲线等规定的形状。*在Jitter Setting卷展栏里改动Baseline 、kerning、Rotation、scale四个参数可以做跳舞文字特效*三维图层是否打开应该察看层上有没有立方体的图标*不产生投影的只有环境光*跟踪技术中的四点跟踪是最稳定的*对图层运用Mask,位于Mask中的图像可见,而Mask之外的图像将被遮蔽。*在After Effects 中创建一个三维合成。并且把场景中的3D Layer 进行Pre-Compose(重组)。对重组后的层使用Camera Tool 进行操作,使其在三维场景中随摄像机变化,应该进行下面哪个操作?A.激活重组层的开关B.在Comp 中创建Camera。C.切换到Active Camera 视图D.激活重组层的开关*要在三维场景中产生正确的投影,下列哪些条件应该被满足?A.场景中必须有至少一盏Light。B.Light 的Casts Shadows 属性必须开启。C. 投射阴影层的Casts Shadows 属性必须开启。D.接受阴影层的Casts Shadows 属性必须开启。*下列哪些Light 可以产生投影?A.SpotB. PointC.ParallelD. Ambient*在为遮罩形状记录动画时,删除的控制点仅影响当前时间遮罩,其他时间遮罩控制点数目不变。要满足上面的条件,应该进行下列哪种操作?A.激活Preserve Constamt Vertex Count when EditingMasksB.关闭Preserve Constamt Vertex Count when EditingMasksC. 打开Lock MaskD.打开Free Thransform Points*为Mask 制作Shape 动画后,使用下列哪个命令可以方便的提高动画精度?A.调节Mask FeatherB.修改Mask OpacityC.应用Smart Mask InterpolationD.设置Mask Expansion*Mask 可以由下面哪些方法创建?A.使用自由笔工具随意绘制创建MaskB.使用Pen 工具连接控制点创建MaskC.从Illustrator 或者Photoshop 中复制Path,粘贴到After Effects 中,产生Mask。D.根据指定的图像通道,自动产生Mask。*对于Track Matte 描述正确的是:A.可以指定Comp 中的某个Layer 作为当前Layer 的Matte。B.当前Layer 可以将其上方的Layer 作为Matte 使用。C.作为Matte 使用的Layer 会根据自己的Alpha 或者亮度D.通道产生屏蔽。E.作为Matte 使用的Layer,会自动关闭其显示开关。*下列有关于Layer,描述正确的是:A.在Timeline 中处于上方的Layer 一定会挡住其下的Layer。B.利用Layer Mode,可以根据Layer 间的颜色差异,产生混和效果。C.对于RPF 和PSD 这样含有图层的文件,可以选择个别图层单独导入。D.Comp 中的多个Layer 可以被组合为一个Layer。*当Comp B 作为Comp A 的Layer 存在的时候,下列描述正确的是:A.Comp B 与其产生的Layer 会产生互动的关系,对一方的改动必然影响另外一方B.对Comp B 的改动会影响其产生的Layer,对Layer 的操作则对Comp B 不发生影响C.Comp B 会受到其产生的Layer 的影响,但是对CompB 的操作不影响其LayerD.Comp B 与其产生的Layer 之间不发生影响。*PAL 制影片的帧速率(the Frame Rate)是多少?A.24 帧B.25 帧C.29.97 帧D.30 帧*After Effects 可以导入下列哪些类型的文件格式?D. MAX*PAL 制的电视节目,使用下列哪种Pixel Aspect Raito(像素宽高比)?A.4 :3B.3 :2D.1.07*After Effects 可以用一下哪些通道量化指标来处理影片?A.8 bits per channelB.10 bits per channelC. 16 bits per channelD.24 bits per channel*下列哪种插值方法只能用于时间插值?A.LinearB.BezierC. Continuous BezierD.Hold*如何在After Effects 中开始创建自己的电影?A.执行File/New/Project 命令和Composition/NewComposition 命令B.执行File/Open 命令C.通过File/Import 命令将数字化的音频视频素材文件导入Project 窗口中,并用鼠标将素材拖入Comp中进行编辑D.执行File/Save 命令,保存为一项工程*TimeLine 窗口中层的属性卷展栏可以实现下列哪些功能:A.设定Text 动画B. 设定Effects 动画C.设定位置动画D.施加Effects 特技效果*使用何种方法可为导入的素材指定准确的Alpha 通道?A.把素材从桌面文件夹中直接拖至Project 窗口中B.执行File/Import/Footage 命令C.执行File/Import/Photoshop As Comp...命令D.执行File/Interpret Footage 命令*解释素材(Interpret Footage)的功能是:A.指定带Alpha 通道的素材文件在导入After Effects中使用何种蒙版类型B.为素材设置场C.解释素材文件的来源D.对素材设置循环*After Effects 可以将下面那些文件以Comp 方式导入?A.PhotoshopB.IllustratorC.PremiereD.Freehand*After Effects 能识别:A.Photoshop 文件及保持图层的透明度信息B.Photoshop 文件中图层的混和模式C.Photoshop 文件中Path 的信息D.Photoshop 文件中的层的风格化设置*After Effects 把图像或电影片断的尺寸限制在:A.30000*30000 像素B.40000*40000 像素C.50000*50000 像素D.60000*60000 像素*After Effects 处理大尺寸图像或电影片断的快速有效的方法为:A.把图像或电影片断的尺寸缩小B.使用代理(Proxy )C.在Composition Setting 中设置较小的分辨率(Resolution),当电影编辑完成后再将分辨率恢复到所需要的大小D.把图像或电影片断的尺寸放大*下列哪种混和模式只显示Comp 图层中对应像素较亮的部分?A.MultiplyB.ScreenC.LightenD.Darken*bit 位深度的含义是?A.每个通道使用2 的4 次方量化B.每个通道使用2 的8 次方量化C.每个通道使用8 的2 次方量化D.每个通道使用4 的2 次方量化*如果要连续向After Effects 中导入多个素材,应该选择下列哪个命令?A.Import>FileB.Project 窗口中双击C.Import>Multiple FilesD.Import>Files*可以在下列哪个窗口中通过调整参数精确控制合成中的对象?A.Project 窗口B.Comp 窗口C.Timeline 窗口D.Info 窗口*After Effects 属于下列哪种工作方式的合成软件?A.使用流程图节点进行工作B.面向层进行工作C.使用轨道进行工作D.综合上面所有的工作方式*下列那种信息无法在After Effects 中使用?A.三维通道文件中的深度信息B.三维通道文件中的摄像机信息C.文本文件中的对象属性数据信息D.三维通道中的贴图信息*在三维空间中进行合成时,After Effects 最多可以同时打开几个窗口进行工作?*下面哪种方法可以为一段影片实现不同片断的复杂变速?A.StretchB.DurationC. Time-RemappingD.In/Out*为特效的效果点设置动画后。下列哪个窗口能够对运动路径进行编辑?A.Comp 窗口B. Layer 窗口C.Timeline 窗口D.Effect Controls 窗口*After Effects 中,最多可以恢复的步数是?*如果要完全显示对象的运动路径,应该选择?A.No Motion PathB.All KeyframesC.No More Than KeyframesD.No More Than Base*下面哪种预演方式速度最快?A.RAM PreviewB.Shift RAM PreviewC. Wireframe PreviewD.Motion with Trails*After Effects 可以以下列哪些方法产生层?A.建立Solid 层B. 由素材产生层C. 由Comp(合成)嵌套产生层D.Pre-Comp(重组)产生层*对两个以上的层进行重组后产生一个新层,下列哪些解释是正确的?A.重组前的所有关键帧效果在重组后不能再次编辑B. 重组前的所有关键帧效果在重组后可以再次编辑C.重组产生的层相当于将参予重组的层合并渲染后的新层D.重组时会建立一个Comp,该Comp 和重组层是互动的*下面那些方法可以对影片进行渲染输出?A.File>ExportB.Composition>Make MovieC.Composition>Save Frame AsD. File>Save*可以在下列哪个窗口中对素材的场进行设置?A.Interpret FootageB.Replace FootageC. Reload FoogtageD. Set Proxy File*根据层的Transform 动画,产生真实的运动模糊现象,下列哪种方法是正确的?A.打开运动模糊开关B.应用Each 特效C.应用Direction Blur 特效D.应用Motion Blur 特效*After Effects 最多可以设置多少个标记点?*After Effects中,Vector Paint 特效在下列哪个窗口中可以完成绘制工作?A.Comp 窗口B.Layer 窗口C. Effect Control 窗口D. Timeline 窗口*选择图层,在Timeline面板中复制图层的快捷方式正确的是:A.Ctrl+DB.Ctrl+shift+DC.Ctrl+ED.Ctrl+O*下面那些方法可以对影片进行渲染输出?A.File/ExportB.Composition/Make MovieC.Composition/Save Frame AsD.File/Save*可以在下列那些窗口中设置层的入点和出点?A.Footage 窗口B.Layer 窗口C.Timeline 窗口D.Comp 窗口*可以带有Alpha通道的色彩深度是?A.8bit 色彩深度B.16bit 色彩深度C.24bit 色彩深度D.3.2bit 色彩深度*Adobe After Effects 中,每层画面最多能加多少个打开或关闭的mask?A.128个B.256个C.512个*After Effects 的粒子特效中包含下列哪几种粒子类型:A.CannonB.GridC.Layer ExploderD.Particle Exploder*在Timeline面板中任意选择一个图层之后,通过键盘快捷键可以快速显示任何Transform(变换)属性,下面说法正确是A.P 显示PositionB.A 显示Anchor PointC.S 显示ScaleD.T 显示Opacity*采用下面哪些步聚可以创建新的合成图像A.单击Project面板底部的Create A New Composition 按钮B.选择Composition/New CompositionC.Ctrl + N 键D.Ctrl + Alt+N 键*对于视频制式的使用,下列描述那些是正确的?A.美国,加拿大采用NTFS制式B.日本采用PAL制式C.欧洲采用NTFS制式D.中国采用PAL制式*在Adobe After Effects CS3中,想要连续导入多个素材的方法有:A.执行File>Import>File菜单命令B.执行File>Import>Multiple File菜单命令C.快捷键Ctrl+Alt+ID.执行File>Import>Placeholder菜单命令*在Adobe After Effects 中,下列菜单命令可以达到删除素材目的的有:A.File>Remove Unused FootageB.File>Consolidate All FootageC.File>Reduce ProjectD.Edit>Clear*如果希望在Adobe After Effects 中替换某一个素材,正确的方法是:A.在项目窗口中选择一个素材,使用命令File>Create>proxy>MovieB.在项目窗口中选中一个素材,使用命令File>Set>Proxy>FileC.在项目窗口中选中一个素材,使用命令File>Interpret Footage>MainD.在项目窗口中选中一个素材,使用命令File>Replace Footage>File*删除关键帧的方法有:A.选中要删除的关键帧,选择菜单命令“Edit>Clear”B.选中要删除的关键帧,取消关键帧导航器中的对勾C.选中要删除的关键帧,鼠标左键拖出时间线窗口D.选中要删除的关键帧,按Delete键*制作图中文字随着水波荡漾而产生自然变形的效果,应该使用那种特效?A.Bezier Warp特效B.Displacement Map特效C.Ripple特效D.Wave Warp特效*Adobe After Effects 将所有的特效都存放在那个文件夹下:A.LanguagesB.LegalC.Plug-insD.Scripts*在Adobe After Effects 中如何将一段影片倒放?A.Time StretchB.Time RemappingC.Time-Reverse KeyframesD.Time Difference*将同一个素材复制后进行相互叠加,下了叠加方式中,能够使图像亮部更亮的是:B.DarkenC.ScreenD.Luminosity*在Adobe After Effects 中,对于已生存的遮罩,可以进行那些调节:A.对遮罩边缘进行羽化B.设置遮罩的不透明度C.扩展和收缩遮罩D.对遮罩进行反转*在Adobe After Effects 中,可以以下列哪些方法产生层?A.由素材产生层B.由Comp(合成)嵌套产生层C.Pre-Comp(重组)产生层D.建立Solid层*如图所示的破碎效果,应该使用下列哪个效果实现?A.ParticleB.MosaicC.FractalD.Shatter*当我们激活了图层的3D功能后,图层的轴向中多出了哪个轴向?A.X纵向轴B.Y竖向轴C.Z深度轴D.Alpha*打开涂层的3D Layer开关后,图层将会发生哪些变化?A.After Effects将对图层添加第三个轴B.该图层还会添加3D图层特有的新属性C.After Effects将对图层删除一些属性D.操作视图转为三维视图显示*为什么说用多视图查看包含3D图层的合成图像非常重要?A.根据在Composition面板中所使用的视图不同,所看到的3D图层效果可能具有欺骗性B.激活3D视图后,可以观察到一个图层相对于合成图像内其他图层的真实位置C.可以打开多个控制面板进行观看D.视图被分为摄像机视图以及XYZ三个轴向查看视图*如果场景中添加了灯光而画面中仍然是黑色显示,分析原因可能是下属哪些原因?A.灯光亮度属性参数过低B.显示原因,需渲染出来观看C.灯光没有照到对象上面D.灯光未添加上*After Effects中光照是一种图层,在添加时,可以选择哪几种类型的光照?A.Parallel(平行光)B.Spot(聚光)C.Point(点光)D.Ambient(环境光)*定位聚光灯的位置需要有哪些操作?A.在预览视窗里直接拖放灯光兴趣点移动灯光照射位置B.调节Timeline面板中的灯光图层中的Position属性C.按键盘上快捷键Ctrl+Shift+Y调出图层属性面板进行编辑D.调节Composition面板中的视图窗口进行观察,根据需要调整灯光位置*运动稳定的主要作用是什么?A.通过跟踪消除图像中的抖动,使画面平稳B.获取图像抖动信息,确保素材与画面匹配C.跟踪画面中某一点的运动信息D.追踪画面运动*在执行软件跟踪中,为了得到最平滑的跟踪效果,应选择的区域是:A.在整个素材中都是可见的B.对于周围区域具有反差强烈的对比色C.具有明显的外形轮廓(至少应在搜索区内)D.在整个影片中都具有一致的形状和颜色*After Effects中提供了哪些追踪方式?A.单点追踪B.平行角定位C.透视角定位D.外形定位*有关于渲染下列说法正确的是:A.在渲染过程中,After Effects可以在渲染中途停下来,后面可以接着继续渲染B.在After Effects中,可以同时创建用于渲染和输出模块设置的模板。这些模板可以预设,以便在使用时直接套用。C.通过渲染序列窗口可以设置每个合成项目的渲染质量、输出格式和输出路径等。D.在渲染序列窗口中我们可以同时排列多个渲染任务进行最终渲染输出。*PAL和SECAM制式的彩色电视机使用的色彩模式是:C CMYK*被称为真彩色的色彩深度位数为:*构成视频素材文件最小的单位元素是:*中国电视采用的制式为:B NTSCC SECAM*常见的高清视频的画面尺寸有:A 1280x720B 720x576C 1920x1080D 720x480*Adobe After Effects CS5可以安装在哪些操作系统上?A Windows XPB Windows Vista 32位C Windows 7 64位D MAC OSX 10.6.3*下列关于Adobe After Effects CS5自动保存功能的说法正确的是?A 自动保存功能默认为开启状态B 自动保存功能的默认保存时间间隔为20分C 自动保存功能默认的项目保存数量为5个D 自动保存功能的最小保存时间间隔为1分*在“Composition”合成显示窗口中可以打开的辅助显示功能有:A Title/Action SafeB GridC GuidesD Rulers*下列选项属于Adobe After Effects CS5特性的是:A 支持AI和PS文件的无缝结合B 支持导入色彩LUT文件C 新增Roto Brush复杂抠像功能D 支持单通道32位的图片*下列那一项操作可以将“Project”项目窗口中的素材文件替换为新的文件?A “File”>“Replace Footage”B “File”>“Interpret Footage”C “File”>“Reload Footage”D “File”>“Reveal in Explorer”*下列哪一项操作可以将“Project”项目窗口中的素材文件显示在资源管理器中?A “File”>“Replace Footage”B “File”>“Interpret Footage”C “File”>“Reload Footage”D “File”>“Reveal in Explorer”*下列文件格式中可以导入到Adobe After Effects CS5中的有:C Rmvb*在Adobe After Effects CS5中,关于导入PSD格式素材文件的说法正确的是:A After Effects CS5支持所有版本的Photoshop文件B After Effects CS5不支持CMYK色彩模式的Photoshop文件C Photoshop文件中的透明部分在导入后继续保持透明D After Effects CS5支持导入Photoshop文件中的图层*如何在Timeline窗口中对素材快速排列顺序使它们依次入、出点对齐?A 按Ctrl+A键将素材全部选中,然后按 [ 键B 按Ctrl+A键将素材全部选中,然后按 Alt+[ 键C 按Ctrl+A键将素材全部选中,然后按 Alt+] 键D 按Ctrl+A键将素材全部选中,然后使用Animation > Keyframe Assistant > Sequence Layers命令*对于一个固态层,在时间线窗口内具有的transform属性有:A SkewB Anchor PointC ScaleD Opacity*对层的部分时间段落进行删除的命令有:A Sequence LayersB Lift Work AreaC Split LayerD Extract Work Area*在“Timeline”窗口中选中层,将时间线指针移动到欲选定的入点位置,按下哪个组合键可将入点设置到时间线指针所在处?A Ctrl+]B Alt+]C Alt+[D Ctrl+[*在时间线窗口中替换一个层可使用以下哪个命令?A Split LayerB Reveal Layer in Project Flowchart ViewC Sequence LayersD Reveal Expression Errors*在缺省情况下,在时间线窗口中的层均使用其源文件名,如果需要改变层的名称,那么A 双击该图层的名称,修改图层名称B 按住Alt键,双击该图层的名称,修改图层名称C 选中需要修改的图层,按下主键盘区的Enter键,修改图层名称D 选中需要修改的图层,按下数字键盘区的Enter键,修改图层名称*在After Effects 中,能够直接建立的层包括:A TextB Adjustment layerC SolidD Null Object*如果希望得到当前层的完全相同的副本文件,则应执行的操作为?A “Edit”>“Duplicate”B “Edit”>“Copy”C “Edit”>“Paste”D “Edit”>“Cut”*如果要使一个自转的层进行公转,如图所示。应该做的操作是?
A 改变层的Anchor Point(轴心点)位置B 调整层的Position(位置)C 调整层的Rotation(旋转)D 调整层的Scale(比例)*在After Effects 中,展开当前图层的Anchor Point属性的快捷键是:*调色后产生的噪波,利用下方哪种层模式,可以降低噪波又不影响调色效果?A OverlayB DifferenceC SaturationD Luminosity*下列哪种混和模式可以把当前层的色相和饱和度应用到它下面的图层影像中?B SaturationC ColorD Luminosity*下列哪种方法可以对层上的关键帧进行反转?A Time-Reverse KeyframesB 按快捷键Ctrl + Alt + RC 改变层的入点D 改变层的出点*下列哪些因素可以加快动画的运动A 关键帧间隔时间缩短B 关键帧间隔时间加长C 关键帧间的数据差增大D 关键帧间的数据差减小*以下哪种关键帧差值方式为不可能实现的?A 线性入静止出B 贝赛尔入线性出C 静止入自动贝赛尔出D 贝赛尔入静止出*通过以下哪种方式可以使影片素材实现反向播放?A 使用Layer>Time>Time Stretch 菜单命令调出Time Stretch 对话窗口,在Stretch Factor 或New Duration 中输入负值B 使用Animation> Keyframe Assistant〉Time-Reverse KeyframesC 使用Layer>Enable Time Remapping 菜单命令,生成Time Remap 关键帧,设置好关键帧属性即可实现素材倒放D 通过手动移动素材层的出入点可以实现素材的倒放*“Spatial Interpolation”(空间差值)的四种运算方式中,哪种方式产生直线运动?A 线性差值B 贝塞尔差值C 连续贝塞尔差值D 自动贝塞尔差值*在不影响关键帧参数的情况下通过统一关键帧的时间距离,使多个关键帧形成匀速运动的命令是:A Motion SketchB SmootherC RovingD Wiggler*可使关键帧之间的运动变得平滑流畅的命令是:A Motion SketchB SmootherC RovingD Wiggler*以下关于关键帧说法正确的是?A 关键帧可分为空间差值和时间差值两个类型B 时间线窗口可以以动画曲线编辑器的形式显示关键帧动画的变化情况C 产生关键帧动画需有至少两个关键帧D 在动画曲线编辑器上可直接编辑动画运动*制作由第一个关键帧向第二个关键帧过渡的随机变化动画,应在全选两个关键帧后使用下列哪个命令?A Animation>Keyframe AssistantB Windows>WigglerC Windows>SmootherD Animation>Keyframe Interpolation*在Timeline窗口中,图层左面的solo开关的作用是:A 隐藏/显示当前选中的图层B 打开/关闭当前所选图层所包含的音频信息C 对当前的图层做连续栅格化D 隐藏/显示除当前选择图层以外的其他图层*在Timeline窗口中,当某个层Lock开关选中后,还可以A 对当前层做入出点编辑B 对当前层做特效编辑C 改变当前层的位置D 对当前层做隐藏/显示操作*对于一个Timeline的固态层,下面的描述错误的有:A 任何一个固态层都可以转换为调整层B 任何一个固态层都可以转换为灯光层C 任何一个固态层都可以打开/关闭运动模糊开关D 任何一个固态层都可以打开/关闭三维开关*关于Adjust Layer(调整层),下面说法正确的是:A 它对合成中所有的层都产生影响B 它对Timeline时间线中位于它上面的层产生影响C 它对Timeline时间线中位于它下面的层产生影响D 仅仅Solid固态层可以做调整层*序列图片导入到Adobe After Effects CS5中后形成动画的默认帧速率为?B 23.97*After Effects 中,多个mask之间能做哪些运算来组成不同的mask形状?B LightenC ScreenD Multiply*After Effects 中,用下面的什么运算可以求一个图层上mask1和mask2之间的交集(假设mask1和mask2的不透明度为100%,且mask1在mask2的上面)?A mask1为Add方式,mask2为Subtract方式B mask1为Add方式,mask2为Intersect方式C mask1为Add方式,mask2为Difference方式D mask1为Add方式,mask2为Add方式*使用矩形遮罩工具绘制mask时,A 按住Shift键拖动句柄,可以产生正方形遮罩B 按住Ctrl键拖动句柄,可以产生正方形遮罩C 按住Alt键拖动句柄,可以产生正方形遮罩D 按住Ctrl + Alt键拖动句柄,可以产生正方形遮罩*使用椭圆遮罩工具绘制mask时,A 按住Shift键拖动句柄,可以从遮罩中心开始建立遮罩B 按住Ctrl键拖动句柄,可以从遮罩中心开始建立遮罩C 按住Alt键拖动句柄,可以从遮罩中心开始建立遮罩D 按住Shift + Alt键拖动句柄,可以从遮罩中心开始建立遮罩*当为Mask 的Mask Shape 生成关键帧后,对其施加Smart Mask Interpolation指令,在进行此指令时,中途按ESC键强行退出,会出现下列哪种情形?A 清除所有因施加这次Smart Mask Interpolation 指令而生成的关键帧,相当于没有使用这个指令B 保留在强行退出前因施加这次Smart Mask Interpolation 指令而生成的关键帧C 会造成运算错误甚至死机D 无效,会继续运算此指令*在After Effects 中,对于生成遮罩(Mask)的描述不正确的是:A 可以用钢笔工具(Pen Tool)绘制自由遮罩B 可以用矩形和椭圆遮罩工具绘制规则遮罩C 可以在准备建立遮罩的目标层上单击鼠标右键,选择Mask>New Mask 命令,绘制各种遮罩D 可以利用在Adobe Photoshop 或Adobe Illustrator中绘制的路径作为遮罩*在After Effects 中,对于已生成的遮罩,可以进行那些调节:A 对遮罩边缘进行羽化B 设置遮罩的不透明度C 扩展和收缩遮罩D 对遮罩进行反转*可以通过下列哪个参数来反向显示遮罩范围?A Mask PathB Mask OpacityC InvertedD Mask Fill*下列关于遮罩的说法正确的是:A 遮罩可以是一个密闭轮廓B 遮罩可以是一个开放路径C AE不支持其他软件导入的遮罩D 使用遮罩可以将其范围内的图像从原画面中“抠”出来*产生Text的字符内容动画,下列哪些方法可以实现?A 激活Source Text的关键帧记录器,并修改字符内容B 添加Character Offset属性动画C 添加Character Value属性动画D 添加Tracking属性动画*下列Mask与Text之间的关系描述正确的是:A Text可以转化为MaskB Mask可以转化为TextC Text可以沿指定的Mask路径运动D 作为Text路径存在的Mask,创建Shape动画后,不会影响Text的运动状态*在After Effects 中可以采用如下哪种方式输入文字?A 使用Basic Text特效B 使用Path Text特效C 使用Paint特效D 使用Text文本层*After Effects 是否可以对PSD格式的文字图层进行再编辑?A 可以直接使用文字工具进行编辑,就像编辑After Effects 本身的文字层B 需要对PSD 格式的文字图层应用Convert To Editable Text 菜单命令转化之后方可使用文字工具进行编辑C After Effects 可以支持Photoshop CS 文件中的段落文字和路径文字D 由于导入的时候,会对PSD 格式的文字图层进行栅格化,所以无法进行再编辑*为文本动画添加随机效果,应在“Animate”(动画)系统中添加哪个“Selector”(选取)属性?A RangeB ExpressionC OffsetD Wiggly*按下面的那个热键可以展开Timeline窗口内某层所施加的特效?*Reshape特效中所使用的Mask,必须满足下面哪个要求?A 必须是开放的MaskB 必须是封闭的MaskC 开放和封闭Mask都可D Mask必须由Pan工具建立*对图像的某个色域局部进行调节,应该使用下列哪种调色方式?A Hue/SaturationB LevelsC CurvesD Bright & Contrast*下列特效组中的哪组特效可以实现去背效果?:A DistortB Image ControlC KeyingD Render*特效Calculations的作用是:A 计算图像的RGB通道的值B 以图像的亮度为基准对图像进行平滑的周期填色C 以图像的一个元素为基准对图像进行平滑的周期填色D 对图像的阶调平均化*下面的哪个特效可以将图像中某个指定的颜色修改为另一个指定的颜色(修改时需要对指定色彩的亮度范围进行调整)。A ColoramaB Color LinkC Change ColorD Change to Color*以下哪些关于路径的特效只对封闭路径有效?A ReshapeB VegasC Inner Outer KeyD Audio Waveform 和Audio Spectrum*以下哪些效果为After Effects 可以实现的自动调色效果?A Auto ColorB Auto LevelsC Hue/SaturationD Auto Contrast*为对象应用Each特效,可以产生拖影效果。下列哪种对象可以产生拖影效果?A 制作了位移动画的层C 静态图片层D 一段电影*下列那些方法可以屏蔽当前工作状态下层的特效(仅屏蔽特效)?A 在Render Settings对话框中选择Effect All OffB 取消层的f开关C 取消合成图像的f开关D 按Caps Lock*以下哪种音频特效用于反向播放音频素材?A BackwardsB Bass& TrebleC DelayD Flange&Chorus*以下哪些特效可用来实现图像的模糊?A CC Radial BlurB Channel BlurC Smart BlurD Sharpen*以下哪些特效可使图像产生放大效果?A LiquifyB SpherizeC MagnifyD Bulge*以下哪种特效可模拟纸张翻页的效果?A CC SlantB CC Page TurnC Corner PinD Mesh Warp*在同一层中哪种特效用于在图像中拾取某一像素色彩,并将该色填充到整个层中?A FillB Paint BucketC Eyedropper FillD Lens Flare*以下哪些特效可为画面的遮罩区域创建描边效果A RampB ScribbleC StrokeD Write-on*以下哪些特效可用来模拟自然界的闪电场景?A Advanced LightningB CC Light SweepC CC Light RaysD Lightning*下列哪种键控方式属于亮度键控?A Luma KeyB Linear Color KeyC Color Difference KeyD Extract*下列哪个特效组用于去除抠像处理后出现的局部残留颜色以及修正边缘不平滑情况?A KeyingB MatteC DistortD Noise & Grain*以下哪个特效可用来直接创建灰度噪波纹理,也可模拟雾、云、流水、火等效果?A NoiseB Noise AlphaC Fractal NoiseD Noise HLS*以下哪些特效可用于去除噪波?A MedianB Remove GrainC TurbulentD Noise Alpha*以下哪种特效可在层的后面产生阴影制造投影效果?A CC SpotlightB Bevel EdgeC Bevel AlphaD Drop Shadow*以下哪种特效可使图像分裂为若干球形?A CC Ball ActionB CC BubblesC CC DrizzleD CC Hair*以下哪些特效可使图像产生浮雕效果?A Color EmbossB EmbossC MosaicD Posterize*以下哪些特效可使图像产生黑白效果?A Black &WhiteB Color StabilizerC PosterizeD Threshold*用于为画面添加时间码、数字、日期等的特效有:A TimewarpB NumbersC TimecodeD Posterize Time*以下哪种特效用于将其他层的颜色通道和 “Alpha”通道替换到当前层通道中?A Set MatteB Set ChannelsC Shift ChannelsD Solid Composite*对影像进行运动追踪时,如何解决特征区域脱离追踪目标的问题?A 在Layer窗口中调整跟踪分离处的跟踪区域及其它设置,从此处重新进行追踪B 在Layer窗口中手动调整出现分离的帧的跟踪区域C 提高追踪精度D 适当加大搜索区域*After Effects 的运动追踪工具可以对以下哪几种不同的运动方式进行追踪:C 位置及旋转D 仿射边角与透视边角*在After Effects 中,进行运动追踪前,首先需要定义一个追踪范围,追踪范围由两个方框和一个十字线构成;根据追踪类型的不同,追踪范围框数目也不同,可以进行:A 一点追踪B 二点追踪C 三点追踪或四点追踪D 没有数目限制*可以根据图像的哪些差异比较来进行追踪?B LuminanceC SaturationD Depth*After Effect CS5关于“Mocha for AE”跟踪操作的说法正确的是:A 不能识别中文文件名和中文路径B 不能识别数字命名C 可以在Windows程序菜单中打开Mocha for AE的程序D After Effects CS5中为内置需安装插件*After Effects 的运动追踪中,“Parallel Corner Pin”(平行边角)类型属于:A 一点追踪B 二点追踪C 三点追踪D 四点追踪*使用“Track Motion”(运动跟踪)要求画面中,A 有明显的运动物体B 图像为静止状态C 物体运动不明显D 素材可以是图片*在使用“Motion Tracker”时,在“Layer”(层)窗口中可以:A 显示跟踪名称B 同步预览跟踪的画面C 显示跟踪范围D 手动设置跟踪范围*在After Effects 中可以将影片输出为:A AVI格式B WMV格式C MOV格式D MPG格式*Make Movie输出影片的快捷键是:A Ctrl+DB Ctrl+KC Ctrl+MD Ctrl+N*After Effects中输出的影片在电视上一前一后的抖动而不是平滑顺畅的播放,这是因为:A 影片输出时没有选择Frame BlendingB 影片输出时没有选择Motion BlurC 影片输出时Field Render选择了offD 影片输出时Field Render的选择与视频设备的场序相反*After Effects 是否支持网络联机渲染?A 目前不支持B Mac版、Windows版均支持C 只有Mac版支持D Windows版需要另外安装网络渲染工具包*After Effects 不能直接输出的视频格式有:C Rmvb*影片的文件大小与以下哪些因素有关?A 合成的帧尺寸B 合成的品质C 制作的复杂程度D 所选的压缩算法*After Effect CS5中借助以下哪些命令可实现对当前时间点之后的影片做定帧效果?A Layer >Time> Enable Time RemappingB Animation> Keyframe Assistant〉Time-Reverse KeyframesC Layer>Time>Time StretchD Composition > Save Film As > File*Adobe After Effects CS5可将项目输出为Premiere Pro项目,下列说法正确的是:A 它作为不涉及渲染的输出B 仅做保存而不渲染C 作为涉及渲染的输出D 既保存又渲染*关于Adobe After Effects CS5输出一段序列帧的说法正确的是:A 系统将以连续图片的形式记录当前所制作的动画B 输出图片的总数将由“秒数乘以所设置的每秒输出的帧数”来决定C After Effects CS5支持Cineon Sequence序列图片格式D 输出序列帧,必须要在“Format”(格式)下拉列表中选择“sequence”(序列)格式文件*Adobe After Effects CS5可将合成项目渲染输出为下列哪些格式,以便在Adobe Flash Player播放器中播放?*如果希望导出的文件支持在Flash Professional软件中继续编辑,应该导出为哪种格式?*在Adobe After Effects CS5中,关于空间合成的说法正确的是:A 默认的层模式为二维模式B 所有的层都可以转化为三维层C 三维层需要摄像机辅助显示立体效果D 调节层可以转化为三维层*在Adobe After Effects CS5中,关于卷展属性的说法正确的是:A 卷展属性可以使主合成中的三维层独立出来B 设置卷展属性不会影响层的其他属性C 设置卷展属性后,层的混合模式效果会失效D 设置卷展属性后,层的运动模糊效果会失效*下列哪几项属于摄像机调节工具?A Unified Camera ToolB Orbit Camera ToolC Track XY Camera ToolD Track XYZ Camera Tool*在Adobe After Effects CS5中,灯光的类型包括:A SpotB PointC ParallelD Ambient}
导读Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。以下内容来自「Github」,为《PythonDataScienceHandbook[1]》(Python 数据科学手册[2])第四章「Matplotlib」介绍部分。全部内容都在以下环境演示通过:numpy:1.18.5pandas:1.0.5matplotlib:3.2.11.简单的折线图%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
对于所有的 Matplotlib 图表来说,我们都需要从创建图形和维度开始。图形和维度可以使用下面代码进行最简形式的创建:fig = plt.figure()
ax = plt.axes()
在 Matplotlib 中,图形(类plt.Figure的一个实例)可以被认为是一个包括所有维度、图像、文本和标签对象的容器。维度(类plt.Axes的一个实例)就是你上面看到的图像,一个有边界的格子包括刻度和标签,最终还有我们画在上面的图表元素。在本书中,我们会使用变量名fig来指代图形对象,以及变量名ax来指代维度变量。一旦我们创建了维度,我们可以使用ax.plot方法将数据绘制在图表上。下面是一个简单的正弦函数图形:fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));
同样的,我们可以使用 pylab 接口(MATLAB 风格的接口)帮我们在后台自动创建这两个对象:plt.plot(x, np.sin(x));
如果我们需要在同一幅图形中绘制多根线条,只需要多次调用plot函数即可:plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x));
这就是在 Matplotlib 中绘制简单函数图像的所有接口了。下面我们深入了解一下控制坐标轴和线条外观的细节。调整折线图:线条颜色和风格你可能第一个想到需要进行调整的部分就是线条的颜色和风格。plt.plot()函数接受额外的参数可以用来指定它们。通过指定color关键字参数可以调整颜色,这个字符串类型参数基本上能用来代表任何你能想到的颜色。可以通过多种方式指定颜色参数:所有 HTML 颜色名称可以在这里[3]找到。plt.plot(x, np.sin(x - 0), color='blue')
# 通过颜色名称指定
plt.plot(x, np.sin(x - 1), color='g')
# 通过颜色简写名称指定(rgbcmyk)
plt.plot(x, np.sin(x - 2), color='0.75')
# 介于0-1之间的灰阶值
plt.plot(x, np.sin(x - 3), color='#FFDD44')
# 16进制的RRGGBB值
plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元组的颜色值,每个值介于0-1
plt.plot(x, np.sin(x - 5), color='chartreuse'); # 能支持所有HTML颜色名称值
如果没有指定颜色,Matplotlib 会在一组默认颜色值中循环使用来绘制每一条线条。类似的,通过linestyle关键字参数可以指定线条的风格:plt.plot(x, x + 0, linestyle='solid')
plt.plot(x, x + 1, linestyle='dashed')
plt.plot(x, x + 2, linestyle='dashdot')
plt.plot(x, x + 3, linestyle='dotted');
# 还可以用形象的符号代表线条风格
plt.plot(x, x + 4, linestyle='-')
# 实线
plt.plot(x, x + 5, linestyle='--') # 虚线
plt.plot(x, x + 6, linestyle='-.') # 长短点虚线
plt.plot(x, x + 7, linestyle=':');
# 点线
如果你喜欢更简洁的代码,这些linestyle和color参数能够合并成一个非关键字参数,传递给plt.plot()函数:plt.plot(x, x + 0, '-g')
# 绿色实线
plt.plot(x, x + 1, '--c') # 天青色虚线
plt.plot(x, x + 2, '-.k') # 黑色长短点虚线
plt.plot(x, x + 3, ':r');
# 红色点线
上面的单字母颜色码是 RGB 颜色系统以及 CMYK 颜色系统的缩写,被广泛应用在数字化图像的颜色系统中。还有很多其他的关键字参数可以对折线图的外观进行精细调整;可以通过在 IPython 中使用帮助工具查看plt.plot()函数的文档来获得更多细节内容。调整折线图:坐标轴范围Matplotlib 会自动选择非常合适的坐标轴范围来绘制你的图像,但是有些情况下你也需要自己进行相关调整。使用plt.xlim()和plt.ylim()函数可以调整坐标轴的范围:plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5);
如果某些情况下你希望将坐标轴反向,你可以通过上面的函数实现,将参数顺序颠倒即可:plt.plot(x, np.sin(x))
plt.xlim(10, 0)
plt.ylim(1.2, -1.2);
相关的函数还有plt.axis()(注意:这不是plt.axes()函数,函数名称是 i 而不是 e)。这个函数可以在一个函数调用中就完成 x 轴和 y 轴范围的设置,传递一个[xmin, xmax, ymin, ymax]的列表参数即可:plt.plot(x, np.sin(x))
plt.axis([-1, 11, -1.5, 1.5]);
当然plt.axis()函数不仅能设置范围,还能像下面代码一样将坐标轴压缩到刚好足够绘制折线图像的大小:plt.plot(x, np.sin(x))
plt.axis('tight');
还可以通过设置'equal'参数设置x轴与y轴使用相同的长度单位:plt.plot(x, np.sin(x))
plt.axis('equal');
更多关于设置 axis 属性的内容请查阅plt.axis函数的文档字符串。折线图标签本节最后介绍一下在折线图上绘制标签:标题、坐标轴标签和简单的图例。标题和坐标轴标签是最简单的这类标签,Matplotlib 提供了函数用来方便的设置它们:plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)");
这些标签的位置、大小和风格可以通过上面函数的可选参数进行设置。参阅 Matplotlib 在线文档和这些函数的文档字符串可以获得更多的信息。当一幅图中绘制了多条折线时,如果能够绘制一个线条对应的图例能让图表更加清晰。Matplotlib 也内建了函数来快速创建图例。估计你也猜到了,通过plt.legend()函数可以实现这个需求。虽然有很多种正确的方法来指定图例,作者认为最简单的方法是通过在绘制每条线条时指定对应的label关键字参数来使用这个函数:plt.plot(x, np.sin(x), '-g', label='sin(x)')
plt.plot(x, np.cos(x), ':b', label='cos(x)')
plt.axis('equal')
plt.legend();
上图可见,plt.legend()函数绘制的图例线条与图中的折线无论风格和颜色都保持一致。查阅plt.legend文档字符串可以获得更多相关信息;我们在[自定义图表图例]一节中也会讨论更高级的图例应用。额外内容:Matplotlib 的坑虽然大多数的plt函数都可以直接转换为ax的方法进行调用(例如plt.plot() → ax.plot(),plt.legend() → ax.legend()等),但是并不是所有的命令都能应用这种情况。特别是用于设置极值、标签和标题的函数都有一定的改变。下表列出了将 MATLAB 风格的函数转换为面向对象的方法的区别:plt.xlabel() → ax.set_xlabel()plt.ylabel() → ax.set_ylabel()plt.xlim() → ax.set_xlim()plt.ylim() → ax.set_ylim()plt.title() → ax.set_title()在面向对象接口中,与其逐个调用上面的方法来设置属性,更常见的使用ax.set()方法来一次性设置所有的属性:ax = plt.axes()
ax.plot(x, np.sin(x))
ax.set(xlim=(0, 10), ylim=(-2, 2),
xlabel='x', ylabel='sin(x)',
title='A Simple Plot');
2.简单散点图另一种常用的图表类型是简单散点图,它是折线图的近亲。不像折线图,图中的点连接起来组成连线,散点图中的点都是独立分布的点状、圆圈或其他形状。本节开始我们也是首先将需要用到的图表工具和函数导入到 notebook 中:%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
使用 plt.plot 绘制散点图在上一节中,我们介绍了plt.plot/ax.plot方法绘制折线图。这两个方法也可以同样用来绘制散点图:x = np.linspace(0, 10, 30)
y = np.sin(x)
plt.plot(x, y, 'o', color='black');
传递给函数的第三个参数是使用一个字符代表的图表绘制点的类型。就像你可以使用'-'或'--'来控制线条的风格那样,点的类型风格也可以使用短字符串代码来表示。所有可用的符号可以通过plt.plot文档或 Matplotlib 在线文档进行查阅。大多数的代码都是非常直观的,我们使用下面的例子可以展示那些最通用的符号:rng = np.random.RandomState(0)
for marker in ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']:
plt.plot(rng.rand(5), rng.rand(5), marker,
label="marker='{0}'".format(marker))
plt.legend(numpoints=1)
plt.xlim(0, 1.8);
而且这些符号代码可以和线条、颜色代码一起使用,这会在折线图的基础上绘制出散点:plt.plot(x, y, '-ok');
plt.plot还有很多额外的关键字参数用来指定广泛的线条和点的属性:plt.plot(x, y, '-p', color='gray',
markersize=15, linewidth=4,
markerfacecolor='white',
markeredgecolor='gray',
markeredgewidth=2)
plt.ylim(-1.2, 1.2);
plt.plot函数的这种灵活性提供了很多的可视化选择。查阅plt.plot帮助文档获得完整的选项说明。使用plt.scatter绘制散点图第二种更强大的绘制散点图的方法是使用plt.scatter函数,它的使用方法和plt.plot类似:plt.scatter(x, y, marker='o');
plt.scatter和plt.plot的主要区别在于,plt.scatter可以针对每个点设置不同属性(大小、填充颜色、边缘颜色等),还可以通过数据集合对这些属性进行设置。让我们通过一个随机值数据集绘制不同颜色和大小的散点图来说明。为了更好的查看重叠的结果,我们还使用了alpha关键字参数对点的透明度进行了调整:rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
cmap='viridis')
plt.colorbar();
# 显示颜色对比条
注意图表右边有一个颜色对比条(这里通过colormap()函数输出),图表中的点大小的单位是像素。使用这种方法,散点的颜色和大小都能用来展示数据信息,在希望展示多个维度数据集合的情况下很直观。例如,当我们使用 Scikit-learn 中的鸢尾花数据集,里面的每个样本都是三种鸢尾花中的其中一种,并带有仔细测量的花瓣和花萼的尺寸数据:from sklearn.datasets import load_iris
iris = load_iris()
features = iris.data.T
plt.scatter(features[0], features[1], alpha=0.2,
s=100*features[3], c=iris.target, cmap='viridis')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1]);
我们可以从上图中看出,可以通过散点图同时展示该数据集的四个不同维度:图中的(x, y)位置代表每个样本的花萼的长度和宽度,散点的大小代表每个样本的花瓣的宽度,而散点的颜色代表一种特定的鸢尾花类型。如上图的多种颜色和多种属性的散点图对于我们分析和展示数据集时都非常有帮助。plot 和 scatter 对比:性能提醒除了上面说的plt.plot和plt.scatter对于每个散点不同属性的支持不同之外,还有别的因素影响对这两个函数的选择吗?对于小的数据集来说,两者并无差别,当数据集增长到几千个点时,plt.plot会明显比plt.scatter的性能要高。造成这个差异的原因是plt.scatter支持每个点使用不同的大小和颜色,因此渲染每个点时需要完成更多额外的工作。而plt.plot来说,每个点都是简单的复制另一个点产生,因此对于整个数据集来说,确定每个点的展示属性的工作仅需要进行一次即可。对于很大的数据集来说,这个差异会导致两者性能的巨大区别,因此,对于大数据集应该优先使用plt.plot函数。3.误差可视化基础误差条调用一个 Matplotlib 函数就能创建一个基础的误差条:%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
x = np.linspace(0, 10, 50)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)
plt.errorbar(x, y, yerr=dy, fmt='.k');
这里的fmt参数是用来控制线条和点风格的代码,与plt.plot有着相同的语法,参见[简单的折线图]和[简单的散点图]。除了上面的基本参数,errorbar函数还有很多参数可以用来精细调节图表输出。使用这些参数你可以很容易的个性化调整误差条的样式。作者发现通常将误差线条颜色调整为浅色会更加清晰,特别是在数据点比较密集的情况下:plt.errorbar(x, y, yerr=dy, fmt='o', color='black',
ecolor='lightgray', elinewidth=3, capsize=0);
除了上面介绍的参数,你还可以指定水平方向的误差条(xerr),单边误差条和其他很多的参数。参阅plt.errorbar的帮助文档获得更多信息。连续误差在某些情况下可能需要对连续值展示误差条。虽然 Matplotlib 没有內建的函数能直接完成这个任务,但是你可以通过简单将plt.plot和plt.fill_between函数结合起来达到目标。这里我们会采用简单的高斯过程回归方法,Scikit-Learn 提供了 API。这个方法非常适合在非参数化的函数中获得连续误差。我们在这里不会详细介绍高斯过程回归,仅仅聚焦在如何绘制连续误差本身:译者注:新版的 sklearn 修改了高斯过程回归实现方法,下面代码做了相应修改。from sklearn.gaussian_process import GaussianProcessRegressor
# 定义模型和一些符合模型的点
model = lambda x: x * np.sin(x)
xdata = np.array([1, 3, 5, 6, 8])
ydata = model(xdata)
# 计算高斯过程回归,使其符合 fit 数据点
gp = GaussianProcessRegressor()
gp.fit(xdata[:, np.newaxis], ydata)
xfit = np.linspace(0, 10, 1000)
yfit, std = gp.predict(xfit[:, np.newaxis], return_std=True)
dyfit = 2 * std
# 两倍sigma ~ 95% 确定区域
我们现在有了xfit、yfit和dyfit,作为对我们数据的连续拟合值以及误差限。当然我们也可以像上面一样使用plt.errorbar绘制误差条,但是事实上我们不希望在图标上绘制 1000 个点的误差条。于是我们可以使用plt.fill_between函数在误差限区域内填充一道浅色的误差带来展示连续误差:# 可视化结果
plt.plot(xdata, ydata, 'or')
plt.plot(xfit, yfit, '-', color='gray')
plt.fill_between(xfit, yfit - dyfit, yfit + dyfit,
color='gray', alpha=0.2)
plt.xlim(0, 10);
注意上面我们调用fill_between函数:我们传递了的参数包括 x 值,y 值的低限,然后是 y 值的高限,结果是图表中介于低限和高限之间的区域会被填充。上图为我们提供了一个非常直观的高斯过程回归展示:在观测点的附近,模型会被限制在一个很小的区域内,反映了这些数据的误差比较小。在远离观测点的区域,模型开始发散,反映了这时的数据误差比较大。如果需要获得plt.fill_between(以及类似的plt.fill函数)更多参数的信息,请查阅函数的帮助文档或 Matplotlib 在线文档。4.密度和轮廓图有些情况下,我们需要在二维图表中使用轮廓或颜色区域来展示三维的数据(可以设想等高线地图或温度分布图)。Matplotlib 提供了三个有用的函数来处理这项任务:plt.contour绘制轮廓图,plt.contourf来绘制填充区域颜色的图表以及plt.imshow来展示图像。本节会介绍几个使用它们的例子。当然我们还是首先从将需要使用的包导入 notebook 和初始化工作开始:%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np
三维可视化函数def f(x, y):
return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
轮廓图可以使用plt.contour函数进行创建。它接收三个参数:x参数代表三维网格的平面横轴坐标,y参数代表三维网格的平面纵轴坐标,而z参数代表三维网格的高度坐标。最容易用来准备这种网格数据的是np.meshgrid函数,可以将两个一维的数组构造成一个二维的网格:x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
下面我们可以绘制标准的轮廓线图表:plt.contour(X, Y, Z, colors='black');
图中值得注意的是,当使用单色绘制轮廓图时,虚线代表的是负数的数值,而实线代表的是正数。而轮廓线可以通过指定cmap参数来设置线条的色图。下例中展示了使用色图且绘制了更多的轮廓线的例子,会在整个数据范围区域内等距分布有 20 条轮廓线:plt.contour(X, Y, Z, 20, cmap='RdGy');
上例中我们选择了RdGy(Red-Gray的缩写)色图,这对于聚集的数据来说是一个不错的选择。Matplotlib 有大量的颜色图可供使用,你可以通过在 IPython 中对plt.cm模块使用 TAB 自动补全方法就可以看到:plt.cm.<TAB>
上面的图看起来比第一幅图好多了,但是线条之间的空隙还是有点让人混淆。我们可以将上面的图改为填充轮廓图来解决这个问题,使用plt.contourf()函数(注意函数名最后有个 f,代表填充 fill),这个函数的语法基本上与plt.contour()保持一致。并且我们加上了plt.colorbar()函数,这个函数会在图表边上创建一个颜色图例用以展示颜色所表示的数值区域:plt.contourf(X, Y, Z, 20, cmap='RdGy')
plt.colorbar();
有了图例,很容易可以看出黑色区域代表着“峰”,而红色区域代表这“谷”。上图有一个缺点,那就是图中颜色的阶梯是离散的而不是连续的,这通常不是我们想要的。我们可以通过设置很高的轮廓线数量来改善,但是这会导致绘制图表的性能降低:Matplotlib 必须在每个颜色阶梯上绘制一条新的轮廓多边形。更好的办法是使用plt.imshow()函数,它会将一个二维的网格图表转换为一张图像。下面的例子展示了该方法:plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower',
cmap='RdGy')
plt.colorbar()
plt.axis(aspect='image');
C:\Users\gdc\Anaconda3\lib\site-packages\ipykernel_launcher.py:4: MatplotlibDeprecationWarning: Passing unsupported keyword arguments to axis() will raise a TypeError in 3.3.
after removing the cwd from sys.path.
然而,在使用imshow()的时候也有一些坑:plt.imshow()不接受 x 和 y 网格值作为参数,因此你需要手动指定extent参数[xmin, xmax, ymin, ymax]来设置图表的数据范围。plt.imshow()使用的是默认的图像坐标,即左上角坐标点是原点,而不是通常图表的左下角坐标点。这可以通过设置origin参数来设置。plt.imshow()会自动根据输入数据调整坐标轴的比例;这可以通过参数来设置,例如,plt.axis(aspect='image')能让 x 和 y 轴的单位一致。最后,有时可能需要将轮廓图和图像结合起来。例如,下例中我们使用了半透明的背景图像(通过alpha参数设置透明度),然后在背景图层之上绘制了轮廓图,并带有每个轮廓的数值标签(使用plt.clabel()函数绘制标签):contours = plt.contour(X, Y, Z, 3, colors='black')
plt.clabel(contours, inline=True, fontsize=8)
plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower',
cmap='RdGy', alpha=0.5)
plt.colorbar();
通过组合使用plt.contour、plt.contourf和plt.imshow这三个函数,基本可以满足我们绘制所有这种在二维图标上的三维数据的需求。需要了解更多函数的参数信息,参考它们的文档字符串。如果你对于使用三维图表展示这种数据感兴趣,参见[在 matplotlib 中创建三维图表]。5.直方图,分桶和密度一个简单的直方图可以是我们开始理解数据集的第一步。前面我们看到了 Matplotlib 的直方图函数,我们可以用一行代码绘制基础的直方图,当然首先需要将需要用的包导入 notebook:%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
data = np.random.randn(1000)
plt.hist(data);
hist()函数有很多的参数可以用来调整运算和展示;下面又一个更加个性化的直方图展示:译者注:normed 参数已经过时,此处对代码进行了相应修改,使用了替代的 density 参数。plt.hist(data, bins=30, density=True, alpha=0.5,
histtype='stepfilled', color='steelblue',
edgecolor='none');
plt.hist文档中有更多关于个性化参数的信息。作者发现联合使用histtype='stepfilled'和alpha参数设置透明度在对不同分布的数据集进行比较展示时很有用:x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)
kwargs = dict(histtype='stepfilled', alpha=0.3, density=True, bins=40)
plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
如果你只是需要计算直方图的数值(即每个桶的数据点数量)而不是展示图像,np.histogram()函数可以完成这个目标:counts, bin_edges = np.histogram(data, bins=5)
print(counts)
[ 49 273 471 183
24]
二维直方图和分桶正如前面我们可以在一维上使用数值对应的直线划分桶一样,我们也可以在二维上使用数据对应的点来划分桶。本节我们介绍几种实现的方法。首先定义数据集,从多元高斯分布中获得x和y数组:mean = [0, 0]
cov = [[1, 1], [1, 2]]
x, y = np.random.multivariate_normal(mean, cov, 10000).T
plt.hist2d:二维直方图绘制二维直方图最直接的方法是使用 Matplotlib 的plt.hist2d函数:plt.hist2d(x, y, bins=30, cmap='Blues')
cb = plt.colorbar()
cb.set_label('counts in bin')
类似plt.hist,plt.hist2d有许多额外的参数来调整分桶计算和图表展示,可以通过文档了解更多信息。而且,plt.hist有np.histogram,plt.hist2d也有其对应的函数np.histogram2d。如下例:counts, xedges, yedges = np.histogram2d(x, y, bins=30)
如果要获得更高维度的分桶结果,参见np.histogramdd函数文档。plt.hexbin:六角形分桶刚才的二维分桶是沿着坐标轴将每个桶分为正方形。另一个很自然的分桶形状就是正六边形。对于这个需求,Matplotlib 提供了plt.hexbin函数,它也是在二维平面上分桶展示,不过每个桶(即图表上的每个数据格)将会是六边形:plt.hexbin(x, y, gridsize=30, cmap='Blues')
cb = plt.colorbar(label='count in bin')
plt.hexbin有许多有趣的参数,包括能对每个点设置权重和将每个桶的输出数据结果改为任意的 NumPy 聚合结果(带权重的平均值,带权重的标准差等)。核密度估计另外一个常用来统计多维数据密度的工具是核密度估计(KDE)。这目前我们只需要知道 KDE 被认为是一种可以用来填补数据的空隙并补充上平滑变化数据的方法就足够了。快速和简单的 KDE 算法已经在scipy.stats模块中有了成熟的实现。下面我们就一个简单的例子来说明如何使用 KDE 和绘制相应的二维直方图:from scipy.stats import gaussian_kde
# 产生和处理数据,初始化KDE
data = np.vstack([x, y])
kde = gaussian_kde(data)
# 在通用的网格中计算得到Z的值
xgrid = np.linspace(-3.5, 3.5, 40)
ygrid = np.linspace(-6, 6, 40)
Xgrid, Ygrid = np.meshgrid(xgrid, ygrid)
Z = kde.evaluate(np.vstack([Xgrid.ravel(), Ygrid.ravel()]))
# 将图表绘制成一张图像
plt.imshow(Z.reshape(Xgrid.shape),
origin='lower', aspect='auto',
extent=[-3.5, 3.5, -6, 6],
cmap='Blues')
cb = plt.colorbar()
cb.set_label("density")
KDE 有着光滑的长度,可以在细节和光滑度中有效的进行调节(一个例子是方差偏差权衡)。这方面有大量的文献介绍:高斯核密度估计gaussian_kde使用了经验法则来寻找输入数据附近的优化光滑长度值。其他的 KDE 实现也可以在 SciPy 中找到,每一种都有它的优点和缺点;参见sklearn.neighbors.KernelDensity和statsmodels.nonparametric.kernel_density.KDEMultivariate。要绘制基于 KDE 进行可视化的图表,Matplotlib 写出的代码会比较冗长。6.自定义图标图例图例可以为可视化赋予实际含义,为不同的图标元素附上明确说明。我们前面看到了一些简单的图例创建例子;本小节中我们来介绍一下在 Matplotlib 中自定义图例的位置和进行美化的方法。可以使用plt.legend()函数来创建最简单的图例,这个函数能自动创建任何带有标签属性的图表元素的图例:import matplotlib.pyplot as plt
plt.style.use('classic')
%matplotlib inline
import numpy as np
x = np.linspace(0, 10, 1000)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), '-b', label='Sine')
ax.plot(x, np.cos(x), '--r', label='Cosine')
ax.axis('equal')
leg = ax.legend();
但除此之外还有很多能自定义图例的方法。例如,我们可以指定图例位置并且去除边框:ax.legend(loc='upper left', frameon=False)
fig
我们可以使用ncol属性设置图例中每行的列数:ax.legend(frameon=False, loc='lower center', ncol=2)
fig
还可以使用圆角方框(fancybox)或者增加阴影,设置方框的透明度(alpha 值)或修改文字的边距:ax.legend(fancybox=True, framealpha=1, shadow=True, borderpad=1)
fig
要获取更多 legend 函数的可用选项信息,请参考plt.legend的文档字符串。选择设置图例的元素正如我们前面例子所示,绘制的图例默认包括所有带标签的元素。如果这不是想要的效果,我们可以调整哪些元素和标签会出现在图例当中,这可以通过设置 plot 函数或方法返回的对象实现。plt.plot函数能够同时产生多条折线,然后将这些线条的实例列表返回。将其中的部分实例传递到plt.legend()函数就能设置哪些线条会出现在图例中,再通过一个标签的列表指定图例的名称:y = np.sin(x[:, np.newaxis] + np.pi * np.arange(0, 2, 0.5))
lines = plt.plot(x, y)
# lines是一个线条实例的列表
plt.legend(lines[:2], ['first', 'second']);
作者更加倾向于使用第一种方式,因为更加清晰。通过将标签应用在图表元素上,然后绘制到图例中:plt.plot(x, y[:, 0], label='first')
plt.plot(x, y[:, 1], label='second')
plt.plot(x, y[:, 2:])
plt.legend(framealpha=1, frameon=True);
请注意默认情况下,legend 会忽略所有不带标签的元素。散点大小的图例某些情况下默认的图例不足以满足特定的可视化需求。例如,你在使用散点的大小来标记数据的某个特征,然后希望创建一个相应的图例。下面的例子是加州城市人口的散点图,我们使用散点的大小表现该城市的面积,散点的颜色来表现城市的人口数量(自然对数值)。我们希望使用一个图例来指明散点尺寸的比例,同时用一个颜色条来说明人口数量,我们可以通过自定义绘制一些标签数据来实现尺寸图例:译者注:新版 Matplotlib 已经取消 aspect 参数,此处改为使用新的'scaled'参数调用 axis 函数。import pandas as pd
cities = pd.read_csv(r'D:\python\Github学习材料\Python数据科学手册\data\california_cities.csv')
# 提取我们感兴趣的数据
lat, lon = cities['latd'], cities['longd']
population, area = cities['population_total'], cities['area_total_km2']
# 绘制散点图,使用尺寸代表面积,颜色代表人口,不带标签
plt.scatter(lon, lat, label=None,
c=np.log10(population), cmap='viridis',
s=area, linewidth=0, alpha=0.5)
plt.axis('scaled')
plt.xlabel('longitude')
plt.ylabel('latitude')
plt.colorbar(label='log$_{10}$(population)')
plt.clim(3, 7)
# 下面我们创建图例:
# 使用空列表绘制图例中的散点,使用不同面积和标签,带透明度
for area in [100, 300, 500]:
plt.scatter([], [], c='k', alpha=0.3, s=area,
label=str(area) + ' km$^2$')
plt.legend(scatterpoints=1, frameon=False, labelspacing=1, title='City Area')
plt.title('California Cities: Area and Population');
之前的图例都关联着图表上的一些对象,因此如果我们需要展示图例的话我们首先需要绘制图表元素。在上例中,我们需要的图例对象(灰色圆圈)不在图表上,因此我们采用绘制空列表的方式将它们仿造在图表上(实际上图上没有点),但是还是需要注意,只有那些带标签的元素才会出现在图例中。通过绘制空列表,我们创建了三个带标签的对象,然后就可以出现在图例当中,这个图例就能表示出有关城市面积的相关信息。这个策略在很多复杂可视化图表构建过程中都被用到。最后我们注意到这个图表实际上是一个地理位置图表,如果我们能在上面绘制州界线或其他地图相关的元素的话,会更加清晰。Matplotlib 提供了一个 Basemap 额外工具集来实现这个目标。多重图例有时候我们可能需要在同一个图表维度中设计多个图例。不幸的是,Matplotlib 并没有提供很简单的方式实现:通过标准的legend接口,只能在整张图表上创建一个图例。如果你试图使用plt.legend()或ax.legend()创建第二个图例,那么第二条语句创建的图例会覆盖第一条语句创建的。我们只能通过从底层开始来创建一个新的图例 artist 这种方法来解决这个问题,然后使用ax.add_artist()的底层方法手动将第二个作者加到图表上:fig, ax = plt.subplots()
lines = []
styles = ['-', '--', '-.', ':']
x = np.linspace(0, 10, 1000)
for i in range(4):
lines += ax.plot(x, np.sin(x - i * np.pi / 2),
styles[i], color='black')
ax.axis('equal')
# 指定第一个图例的线条和标签
ax.legend(lines[:2], ['line A', 'line B'],
loc='upper right', frameon=False)
# 手动创建第二个图例,并将作者添加到图表中
from matplotlib.legend import Legend
leg = Legend(ax, lines[2:], ['line C', 'line D'],
loc='lower right', frameon=False)
ax.add_artist(leg);
上例展示了用来组成任何 Matplotlib 图表的底层 artist 对象的简单说明。如果你去查看ax.legend()的源代码(你可以通过 IPython 的ax.legend??帮助工具做到),你可以看到这个方法包含了用来构建合适Legend的 artist 对象的逻辑,构建的对象被保存在legend_属性当中,当绘制时被添加到图表上进行展示。7.个性化颜色条图例可以将离散的点标示为离散的标签。对于建立在不同颜色之上的连续的值(点线面)来说,标注了的颜色条是非常方便的工具。Matplotlib 的颜色条是独立于图表之外的一个类似于比色卡的图形,用来展示图表中不同颜色的数值含义。因为本书是使用黑白打印的,本节内容中的所有带色彩的图都可以在(https://github.com/wangyingsm/Python-Data-Science-Handbook)中找到。我们还是首先导入本节需要的包和模块:import matplotlib.pyplot as plt
plt.style.use('classic')
%matplotlib inline
import numpy as np
通过plt.colorbar函数可以创建最简单的颜色条,在本节中我们会多次看到:x = np.linspace(0, 10, 1000)
I = np.sin(x) * np.cos(x[:, np.newaxis])
plt.imshow(I)
plt.colorbar();
我们下面来讨论如何个性化颜色条以及在不同的场合高效的使用它们。自定义颜色条颜色条可以通过cmap参数指定使用的色谱系统(或叫色图):plt.imshow(I, cmap='gray');
所有可用的色图都可以在plt.cm模块中找到;在 IPython 中使用 Tab 自动补全功能能列出所有的色图列表:plt.cm.<TAB>
但是知道在哪里选择色图只是第一步:更重要的是在各种选项中选出合适的色图。这个选择比你预料的要微妙的多。选择色图在可视化方案中选择颜色完整的介绍说明超出了本书的范围,如果你对这个课题和相关内容有兴趣,可以参考文章["绘制更漂亮图表的 10 个简单规则"](http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1003833)。Matplotlib 的在线文档也有一章关于色图选择的有趣讨论[5]。通常来说,你应该注意以下三种不同类型的色图:序列色图:这类型的色谱只包括一个连续序列的色系(例如binary或viridis)。分化色图:这类型的色谱包括两种独立的色系,这两种颜色有着非常大的对比度(例如RdBu或PuOr)。定性色图:这类型的色图混合了非特定连续序列的颜色(例如rainbow或jet)。jet色图,在 Matplotlib 2.0 版本之前都是默认的色图,是定性色图的一个例子。jet作为默认色图的位置其实有点尴尬,因为定性图通常都不是对定量数据进行展示的好选择。原因是定性图通常都不能在范围增加时提供亮度的均匀增长。我们可以通过将jet颜色条转换为黑白来看到这点:from matplotlib.colors import LinearSegmentedColormap
def grayscale_cmap(cmap):
"""返回给定色图的灰度版本"""
cmap = plt.cm.get_cmap(cmap) # 使用名称获取色图对象
colors = cmap(np.arange(cmap.N)) # 将色图对象转为RGBA矩阵,形状为N×4
# 将RGBA颜色转换为灰度
# 参考 http://alienryderflex.com/hsp.html
RGB_weight = [0.299, 0.587, 0.114] # RGB三色的权重值
luminance = np.sqrt(np.dot(colors[:, :3] ** 2, RGB_weight)) # RGB平方值和权重的点积开平方根
colors[:, :3] = luminance[:, np.newaxis] # 得到灰度值矩阵
# 返回相应的灰度值色图
return LinearSegmentedColormap.from_list(cmap.name + "_gray", colors, cmap.N)
def view_colormap(cmap):
"""将色图对应的灰度版本绘制出来"""
cmap = plt.cm.get_cmap(cmap)
colors = cmap(np.arange(cmap.N))
cmap = grayscale_cmap(cmap)
grayscale = cmap(np.arange(cmap.N))
fig, ax = plt.subplots(2, figsize=(6, 2),
subplot_kw=dict(xticks=[], yticks=[]))
ax[0].imshow([colors], extent=[0, 10, 0, 1])
ax[1].imshow([grayscale], extent=[0, 10, 0, 1])
view_colormap('jet')
注意一下上面的灰度图中亮条纹的位置。即使在上述彩色图中,也出现了这种不规则的亮条纹,这会导致眼睛被区域中亮条纹所吸引,这很可能造成阅读者被不重要的数据集部分干扰了。更好的选择是使用类似viridis这样的色图(Matplotlib 2.0 后默认色图),它们被设计为有着均匀的亮度变化。因此它们无论是在彩色图中还是在灰度图中都有着同样的亮度变化:view_colormap('viridis')
如果你更喜欢彩虹方案,另一个好的选择是使用cubehelix色图:view_colormap('cubehelix')
对于其他的情况,例如某种正负分布的数据集,双色颜色条如RdBu(Red-Blue)会很常用。然而正如你从下面例子看到的,如果将双色颜色条转化为灰度的话,正负或两级的信息就会丢失:view_colormap('RdBu')
后面我们会看到更多使用这些色图的例子。Matplotlib 中有大量可用的色图;要看到它们的列表,你可以使用 IPython 来探索plt.cm模块。要在 Python 中更加正规的使用颜色,你可以查看 Seaborn 库的工具和文档。颜色限制和扩展Matplotlib 允许你对颜色条进行大量的自定义。颜色条本身就是一个plt.Axes对象,因此所有轴和刻度定制的技巧都可以应用在上面。颜色条也有着一些有趣的自定义行为:例如,我们可以缩小颜色的范围并且通过设置extend参数将超出范围之外的数值展示为顶部和底部的三角箭头形状。这对于展示一些受到噪声干扰的数据时非常方便:# 在I数组中人为生成不超过1%的噪声
speckles = (np.random.random(I.shape) < 0.01)
I[speckles] = np.random.normal(0, 3, np.count_nonzero(speckles))
plt.figure(figsize=(10, 3.5))
# 不考虑去除噪声时的颜色分布
plt.subplot(1, 2, 1)
plt.imshow(I, cmap='RdBu')
plt.colorbar()
# 设置去除噪声时的颜色分布
plt.subplot(1, 2, 2)
plt.imshow(I, cmap='RdBu')
plt.colorbar(extend='both')
plt.clim(-1, 1);
注意到在左边的图表中,默认的颜色阈值是包括了噪声的,因此整体的条纹形状都被噪声数据冲刷淡化了。而右边的图表,我们手动设置了颜色的阈值,并在绘制颜色条是加上了extend参数来表示超出阈值的数据。对于我们的数据来说,右图比左图要好的多。离散颜色条色图默认是连续的,但是在某些情况下你可能需要展示离散值。最简单的方法是使用plt.cm.get_cmap()函数,在传递某个色图名称的同时,还额外传递一个颜色分桶的数量值参数给该函数:plt.imshow(I, cmap=plt.cm.get_cmap('Blues', 6))
plt.colorbar()
plt.clim(-1, 1);
离散色图的使用方式和其他色图没有任何区别。例子:手写数字# 读取数字0-5的手写图像,然后使用Matplotlib展示头64张缩略图
from sklearn.datasets import load_digits
digits = load_digits(n_class=6)
fig, ax = plt.subplots(8, 8, figsize=(6, 6))
for i, axi in enumerate(ax.flat):
axi.imshow(digits.images[i], cmap='binary')
axi.set(xticks=[], yticks=[])
因为每个数字都是使用 64 个像素点渲染出来的,我们可以认为每个数字是一个 64 维空间中的点:每个维度代表这其中一个像素的灰度值。但是要在图表中将这么高维度空间的联系可视化出来是非常困难的。有一种做法是使用降维技术,比方说使用流形学习来减少数据的维度然而不会丢失数据中有效的信息。我们来看一下将这些手写数字图像数据映射到二维流形学习当中:# 使用Isomap将手写数字图像映射到二维流形学习中
from sklearn.manifold import Isomap
iso = Isomap(n_components=2)
projection = iso.fit_transform(digits.data)
我们使用离散颜色条来展示结果,设置ticks和clim来进一步美化结果的颜色条:# 绘制图表结果
plt.scatter(projection[:, 0], projection[:, 1], lw=0.1,
c=digits.target, cmap=plt.cm.get_cmap('cubehelix', 6))
plt.colorbar(ticks=range(6), label='digit value')
plt.clim(-0.5, 5.5)
我们从流形学习中的映射中可以观察到一些有趣现象:例如,图表中 5 和 3 有一些重叠的部分,这表示一些手写体中 5 和 3 是比较难以辨别的,因此对于自动识别算法来说这是比较容易混淆的部分。而 0 和 1,它们在图表中距离很远,这表示两者比较容易辨别,不太可能造成混淆。这个图表分析与我们的直觉一致,因为 5 和 3 显然比 0 和 1 看起来更加接近。8.多个子图表在一些情况中,如果能将不同的数据图表并列展示,对于我们进行数据分析和比较会很有帮助。Matplotlib 提供了子图表的概念来实现这一点:单个图表中可以包括一组小的 axes 用来展示多个子图表。这些子图表可以是插图,网格状分布或其他更复杂的布局。在本节中我们会介绍 Matplotlib 中用来构建子图表的四个函数。%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np
plt.axes:手动构建子图表构建 axes 作为子图表的最基础方法就是使用plt.axes函数。正如我们前面已经看到,默认情况下,这个函数够创建一个标准的 axes 对象填满整个图表区域。plt.axes函数也可以接收一个可选的列表参数用来指定在 axes 在整个图表中的坐标点位置。列表中有四个数值分别为[left, bottom, width, height](取值都是 0-1),代表着子图表的左边、底部、宽度、高度在整个图表中左边、底部、宽度、高度所占的比例值。例如,我们可以在距离左边和底部 65%的位置,以插图的形式放置一个宽度和高度都是 20%子图表,上述数值应该为[0.65, 0.65, 0.2, 0.2]:ax1 = plt.axes()
# 标准图表
ax2 = plt.axes([0.65, 0.65, 0.2, 0.2]) #子图表
与上述等价的面向对象接口的语法是fig.add_axes()。我们使用这个方法来创建两个垂直堆叠的子图表:fig = plt.figure() # 获得figure对象
ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4],
xticklabels=[], ylim=(-1.2, 1.2)) # 左边10% 底部50% 宽80% 高40%
ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.4],
ylim=(-1.2, 1.2)) # 左边10% 底部10% 宽80% 高40%
x = np.linspace(0, 10)
ax1.plot(np.sin(x))
ax2.plot(np.cos(x));
这样我们就有两个子图表(上面的子图表没有 x 轴刻度),这两个子图表正好吻合:上面图表的底部是整个图表高度 50%位置,而下面图表的顶部也是整个图表的 50%位置(0.1+0.4)。plt.subplot:简单网格的子图表将子图表的行与列对齐是一个很常见的需求,因此 Matplotlib 提供了一些简单的函数来实现它们。这些函数当中最底层的是plt.subplot(),它会在网格中创建一个子图表。函数接受三个整数参数,网格行数,网格列数以及该网格子图表的序号(从左上角向右下角递增):for i in range(1, 7):
plt.subplot(2, 3, i)
plt.text(0.5, 0.5, str((2, 3, i)),
fontsize=18, ha='center')
plt.subplots_adjust函数用来调整这些子图表之间的距离。下面的代码使用了与plt.subplot()等价的面向对象接口方法fig.add_subplot():fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)
for i in range(1, 7):
ax = fig.add_subplot(2, 3, i)
ax.text(0.5, 0.5, str((2, 3, i)),
fontsize=18, ha='center')
上例中我们指定了plt.subplots_adjust函数的hspace和wspace参数,它们代表这沿着高度和宽度方向子图表之间的距离,单位是子图表的大小(在本例中,距离是子图表宽度和高度的 40%)。plt.subplots:一句代码设置所有网格子图表fig, ax = plt.subplots(2, 3, sharex='col', sharey='row')
注意上面我们设置了sharex和sharey之后,内部子图表的 x 轴和 y 轴的标签就自动被去掉了。返回值中 ax 是一个 NumPy 数组,里面含有每一个子图表的实例,你可以使用 NumPy 索引的语法很简单的获得它们:# axes是一个2×3的数组,可以通过[row, col]进行索引访问
for i in range(2):
for j in range(3):
ax[i, j].text(0.5, 0.5, str((i, j)),
fontsize=18, ha='center')
fig
并且相对于plt.subplot,plt.subplots()更复合 Python 从 0 开始进行索引的习惯。plt.GridSpec:更复杂的排列当你需要子图表在网格中占据多行或多列时,plt.GridSpec()正是你所需要的。plt.GridSpec()对象并不自己创建图表;它只是一个可以被传递给plt.subplot()的参数。例如,一个两行三列并带有指定的宽度高度间隔的 gridspec 可以如下创建:grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
使用这个对象我们可以指定子图表的位置和占据的网格,仅需要使用熟悉的 Python 切片语法即可:plt.subplot(grid[0, 0])
plt.subplot(grid[0, 1:])
plt.subplot(grid[1, :2])
plt.subplot(grid[1, 2]);
这种灵活的网格对齐控制方式有着广泛的应用。作者经常在需要创建多个直方图的联合图表中使用这种方法,如下例:# 构建二维正态分布数据
mean = [0, 0]
cov = [[1, 1], [1, 2]]
x, y = np.random.multivariate_normal(mean, cov, 3000).T
# 使用GridSpec创建网格并加入子图表
fig = plt.figure(figsize=(6, 6))
grid = plt.GridSpec(4, 4, hspace=0.2, wspace=0.2)
main_ax = fig.add_subplot(grid[:-1, 1:])
y_hist = fig.add_subplot(grid[:-1, 0], xticklabels=[], sharey=main_ax)
x_hist = fig.add_subplot(grid[-1, 1:], yticklabels=[], sharex=main_ax)
# 在主图表中绘制散点图
main_ax.plot(x, y, 'ok', markersize=3, alpha=0.2)
# 分别在x轴和y轴方向绘制直方图
x_hist.hist(x, 40, histtype='stepfilled',
orientation='vertical', color='gray')
x_hist.invert_yaxis() # x轴方向(右下)直方图倒转y轴方向
y_hist.hist(y, 40, histtype='stepfilled',
orientation='horizontal', color='gray')
y_hist.invert_xaxis() # y轴方向(左上)直方图倒转x轴方向
这种沿着数据各自方向分布并绘制相应图表的需求是很通用的,因此在 Seaborn 包中它们有专门的 API 来实现9.文本和标注创建一个优秀的可视化图表的关键在于引导读者,让他们能理解图表所讲述的故事。在一些情况下,这个故事可以通过纯图像的方式表达,不需要额外添加文字,但是在另外一些情况中,图表需要文字的提示和标签才能将故事讲好。也许标注最基本的类型就是图表的标签和标题,但是其中的选项参数却有很多。让我们在本节中使用一些数据来创建可视化图表并标注这些图表来表达这些有趣的信息。首先还是需要将要用到的模块和包导入 notebook:%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.style.use('seaborn-whitegrid')
import numpy as np
import pandas as pd
例子:节假日对美国出生率的影响本例中的数据可以在 https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv 下载。我们先按照前面的方式进行同样的数据清洗程序,然后以图表展示这个结果:births = pd.read_csv(r'D:\python\Github学习材料\Python数据科学手册\data\births.csv')
quartiles = np.percentile(births['births'], [25, 50, 75])
mu, sig = quartiles[1], 0.74 * (quartiles[2] - quartiles[0])
births = births.query('(births > @mu - 5 * @sig) & (births < @mu + 5 * @sig)')
births['day'] = births['day'].astype(int)
births.index = pd.to_datetime(10000 * births.year +
100 * births.month +
births.day, format='%Y%m%d')
births_by_date = births.pivot_table('births',
[births.index.month, births.index.day])
births_by_date.index = [pd.datetime(2012, month, day)
for (month, day) in births_by_date.index]
C:\Users\gdc\Anaconda3\lib\site-packages\ipykernel_launcher.py:15: FutureWarning: The pandas.datetime class is deprecated and will be removed from pandas in a future version. Import from datetime module instead.
from ipykernel import kernelapp as app
fig, ax = plt.subplots(figsize=(12, 4))
births_by_date.plot(ax=ax);
当我们绘制了这样的图表来表达数据时,如果我们能对一些图表的特性作出标注来吸引读者的注意力通常是非常有帮助的。这可以通过调用plt.text或ax.text函数来实现,它们可以在某个特定的 x,y 轴位置输出一段文字:fig, ax = plt.subplots(figsize=(12, 4))
births_by_date.plot(ax=ax)
# 在折线的特殊位置标注文字
style = dict(size=10, color='gray')
ax.text('2012-1-1', 3950, "New Year's Day", **style)
ax.text('2012-7-4', 4250, "Independence Day", ha='center', **style)
ax.text('2012-9-4', 4850, "Labor Day", ha='center', **style)
ax.text('2012-10-31', 4600, "Halloween", ha='right', **style)
ax.text('2012-11-25', 4450, "Thanksgiving", ha='center', **style)
ax.text('2012-12-25', 3850, "Christmas ", ha='right', **style)
# 设置标题和y轴标签
ax.set(title='USA births by day of year (1969-1988)',
ylabel='average daily births')
# 设置x轴标签月份居中
ax.xaxis.set_major_locator(mpl.dates.MonthLocator())
ax.xaxis.set_minor_locator(mpl.dates.MonthLocator(bymonthday=15))
ax.xaxis.set_major_formatter(plt.NullFormatter())
ax.xaxis.set_minor_formatter(mpl.dates.DateFormatter('%h'));
ax.text方法接收 x 位置、y 位置、一个字符串和额外可选的关键字参数可以用来设置颜色、大小、样式、对齐等文本格式。上面我们使用了ha='right'和ha='center',这里的ha是*hirizonal alignment(水平对齐)*的缩写。要查阅更多的可用参数,请查看plt.text()和mpl.text.Text()的文档字符串内容。转换和文本位置fig, ax = plt.subplots(facecolor='lightgray')
ax.axis([0, 10, 0, 10])
# transform=ax.transData是默认的,这里写出来是为了明确对比
ax.text(1, 5, ". Data: (1, 5)", transform=ax.transData)
ax.text(0.5, 0.1, ". Axes: (0.5, 0.1)", transform=ax.transAxes)
ax.text(0.2, 0.2, ". Figure: (0.2, 0.2)", transform=fig.transFigure);
注意默认情况下,文字是在指定坐标位置靠左对齐的:这里每个字符串开始的"."的位置就是每种转换的坐标位置。transData坐标给定的是通常使用的 x 和 y 轴坐标位置。transAxes坐标给定的是从 axes 左下角开始算起(白色区域)的坐标位置,使用的是宽度和长度的占比。transFigure坐标类似,给定的是从 figure 左下角开始算起(灰色区域)的坐标位置,使用的也是宽度和长度的占比。因此如果我们改变了轴的最大长度,只有transData坐标会收到影响,其他两个还是保持在相同位置:ax.set_xlim(0, 2)
ax.set_ylim(-6, 6)
fig
这个变化可以通过动态改变轴的最大长度看的更加清楚:如果你在 notebook 执行这段代码,你可以将%matplotlib inline改为%matplotlib notebook,然后使用图表的菜单来交互式的改变图表。箭头和标注除了刻度标签和文字标签,另一种常用的标注是箭头。在 Matplotlib 中绘制箭头通常比你想象的难得多。虽然有plt.arrow()函数,作者不建议使用它:这个函数绘制的箭头是一个 SVG 对象,因此在图表使用不同的比例的情况会产生问题,结果通常不能让用户满意。因此,作者建议使用plt.annotate()函数。这个函数会绘制一些文字以及一个箭头,并且箭头可以非常灵活的进行配置。下面我们提供一些参数来使用annotate函数:%matplotlib inline
fig, ax = plt.subplots()
x = np.linspace(0, 20, 1000)
ax.plot(x, np.cos(x))
ax.axis('equal')
ax.annotate('local maximum', xy=(6.28, 1), xytext=(10, 4),
arrowprops=dict(facecolor='black', shrink=0.05))
ax.annotate('local minimum', xy=(5 * np.pi, -1), xytext=(2, -6),
arrowprops=dict(arrowstyle="->",
connectionstyle="angle3,angleA=0,angleB=-90"));
箭头的样式是使用箭头属性字典值进行控制的,里面有很多可用的参数。这些参数在 Matplotlib 的在线文档中已经有了很详细的说明,因此在这里就不将这部分内容重复介绍一遍了。我们在前面出生率图上再使用一些参数进行更多的说明:fig, ax = plt.subplots(figsize=(12, 4))
births_by_date.plot(ax=ax)
# 为图表添加标注
ax.annotate("New Year's Day", xy=('2012-1-1', 4100),
xycoords='data',
xytext=(50, -30), textcoords='offset points',
arrowprops=dict(arrowstyle="->",
connectionstyle="arc3,rad=-0.2"))
ax.annotate("Independence Day", xy=('2012-7-4', 4250),
xycoords='data',
bbox=dict(boxstyle="round", fc="none", ec="gray"),
xytext=(10, -40), textcoords='offset points', ha='center',
arrowprops=dict(arrowstyle="->"))
ax.annotate('Labor Day', xy=('2012-9-4', 4850), xycoords='data', ha='center',
xytext=(0, -20), textcoords='offset points')
ax.annotate('', xy=('2012-9-1', 4850), xytext=('2012-9-7', 4850),
xycoords='data', textcoords='data',
arrowprops={'arrowstyle': '|-|,widthA=0.2,widthB=0.2', })
ax.annotate('Halloween', xy=('2012-10-31', 4600),
xycoords='data',
xytext=(-80, -40), textcoords='offset points',
arrowprops=dict(arrowstyle="fancy",
fc="0.6", ec="none",
connectionstyle="angle3,angleA=0,angleB=-90"))
ax.annotate('Thanksgiving', xy=('2012-11-25', 4500),
xycoords='data',
xytext=(-120, -60), textcoords='offset points',
bbox=dict(boxstyle="round4,pad=.5", fc="0.9"),
arrowprops=dict(arrowstyle="->",
connectionstyle="angle,angleA=0,angleB=80,rad=20"))
ax.annotate('Christmas', xy=('2012-12-25', 3850),
xycoords='data',
xytext=(-30, 0), textcoords='offset points',
size=13, ha='right', va="center",
bbox=dict(boxstyle="round", alpha=0.1),
arrowprops=dict(arrowstyle="wedge,tail_width=0.5", alpha=0.1));
# 设置图表标题和坐标轴标记
ax.set(title='USA births by day of year (1969-1988)',
ylabel='average daily births')
# 设置月份坐标居中显示
ax.xaxis.set_major_locator(mpl.dates.MonthLocator())
ax.xaxis.set_minor_locator(mpl.dates.MonthLocator(bymonthday=15))
ax.xaxis.set_major_formatter(plt.NullFormatter())
ax.xaxis.set_minor_formatter(mpl.dates.DateFormatter('%h'));
ax.set_ylim(3600, 5400);
上图中箭头和文字框都非常详尽了:可以看出你几乎可以使用plt.annotate创建任何你想要的箭头样式。不幸的是,这意味着这种特性都需要手工进行调整,因此如果需要获得印刷质量的图像,这将是一个非常耗费时间的工作。最后,必须指出,上述这种多种样式混合的方式来展现数据肯定不是最佳实践,这里只是为了尽可能多的介绍可用的参数。更多关于 Matplotlib 的箭头和标注样式的讨论和例子可以访问 Matplotlib gallery,特别是标注演示[6]。10.自定义刻度Matplotlib 默认的刻度标志和格式被设计成能满足许多通用场景的需求,但是不会是所有图表的最佳选择。本节会介绍一些调整刻度位置和格式的例子来说明自定义刻度的使用。在介绍例子之前,我们应该加深对 Matplotlib 图表的对象层次的理解。Matplotlib 的设计目标是展示在图表中的所有内容都会表达成为 Python 的对象:例如,回忆前面我们介绍过figure指的是用来展示图表所有内容的方框。每个 Matplotlib 对象也被设计为其子对象的一个容器:例如figure对象中可以包含一个或多个axes对象,每个axes对象都依次包含着其他用来展示图表的内容对象。刻度也不例外。每个axes对象都有着属性xaxis和yaxis,表示 x 和 y 轴,其中包含着所有的属性用来指代轴的线、刻度和标签。主要的和次要的刻度在每个坐标轴上,都有主要的刻度和次要的刻度概念。正如名字指代的,主要刻度通常是大的和更多用到的,而次要刻度通常是小的。默认 Matplotlib 很少使用次要刻度,但是在对数图表中我们可能会看到它们:在 Matplotlib 2.0 之后,当 axis 的跨度过大时,默认次要刻度将会不再展示,因此,下面的代码经过了修改,加上了 xlim 和 ylim 参数。import matplotlib.pyplot as plt
plt.style.use('classic')
%matplotlib inline
import numpy as np
ax = plt.axes(xscale='log', yscale='log', xlim=[10e-5, 10e5], ylim=[10e-5, 10e5])
ax.grid();
我们看到每个主要刻度显示了一个大的标志和标签,而每个次要刻度显示了一个小的刻度标志没有标签。这些刻度属性,位置和标签,都可以使用每个轴的formatter和locator对象进行个性化设置。下面我们来查看一下 x 轴的相应对象:print(ax.xaxis.get_major_locator())
print(ax.xaxis.get_minor_locator())
<matplotlib.ticker.LogLocator object at 0x000001E8074AF108>
<matplotlib.ticker.LogLocator object at 0x000001E8074AD908>
print(ax.xaxis.get_major_formatter())
print(ax.xaxis.get_minor_formatter())
<matplotlib.ticker.LogFormatterSciNotation object at 0x000001E8074AEB88>
<matplotlib.ticker.LogFormatterSciNotation object at 0x000001E8074ADB48>
我们看到主要和次要刻度的位置都是使用LogLocator来设置的(对于对数图表来说那是理所当然的)。然而次要刻度的标签的格式是NullFormatter:这表示次要刻度不会显示标签。译者注:新版 Matplotlib 已经修改,可以看到 Formatter 都统一成为了 LogFormatterSciNotation,再根据图表实际情况选择是否展示标签。下面我们就可以开始介绍一些设置这些 locator 和 formatter 的例子了。隐藏刻度和标签也许最常见的刻度/标签格式设置的操作是隐藏刻度或标签。这可以通过使用plt.NullLocator()和plt.NullFormatter()来设置,如下例:ax = plt.axes()
ax.plot(np.random.rand(50))
ax.yaxis.set_major_locator(plt.NullLocator())
ax.xaxis.set_major_formatter(plt.NullFormatter())
注意上图中我们去除了 x 轴的标签(但是保留了刻度或网格线),y 轴的刻度和标签都被去除了。图表中没有刻度和标签在很多情况下很有用,例如,当你希望展示一个图像的网格。比方说,考虑下面的图表,包含着不同的头像,一个很常见的有监督机器学习问题:fig, ax = plt.subplots(5, 5, figsize=(5, 5))
fig.subplots_adjust(hspace=0, wspace=0)
# 从scikit-learn载入头像数据集
from sklearn.datasets import fetch_olivetti_faces
faces = fetch_olivetti_faces().images
for i in range(5):
for j in range(5):
ax[i, j].xaxis.set_major_locator(plt.NullLocator())
ax[i, j].yaxis.set_major_locator(plt.NullLocator())
ax[i, j].imshow(faces[10 * i + j], cmap="bone")
downloading Olivetti faces from
https://ndownloader.figshare.com/files/5976027
to C:\Users\gdc\scikit_learn_data
注意上图中每张图像都有它自己的 axes,我们将每一个 axes 的 locator 都设置为 null 因为这些刻度值(像素值)在这里并没有任何实际意义。减少或增加刻度的数量默认设置的一个常见问题是当子图表较小时,刻度标签可能会粘在一起。我们可以从下面例子看到:fig, ax = plt.subplots(4, 4, sharex=True, sharey=True)
特别是 x 轴,标签的数字就快重叠在一起了,这让这些标签难以认清。我们可以通过plt.MaxNLocator()来修正这点,用它可以设置最大展示刻度的数量。Matplotlib 会自己计算按照这个最大数量计算的刻度位置:# 对x和y轴设置刻度最大数量
for axi in ax.flat:
axi.xaxis.set_major_locator(plt.MaxNLocator(3))
axi.yaxis.set_major_locator(plt.MaxNLocator(3))
fig
上图就清晰多了。如果你希望对于刻度位置进行更加精细的控制,你可以使用plt.MultipleLocator,我们会接下来讨论这个对象。复杂的刻度格式Matplotlib 的默认刻度格式只能在很多常见情况下工作良好,但是在特殊情况下你会希望能够更多的进行个性化。考虑下面的正弦和余弦图表:# 绘制正弦和余弦图表
fig, ax = plt.subplots()
x = np.linspace(0, 3 * np.pi, 1000)
ax.plot(x, np.sin(x), lw=3, label='Sine')
ax.plot(x, np.cos(x), lw=3, label='Cosine')
# 设置网格、图例和轴极限
ax.grid(True)
ax.legend(frameon=False)
ax.axis('equal')
ax.set_xlim(0, 3 * np.pi);
ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 2))
ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 4))
fig
def format_func(value, tick_number):
# N是pi/2的倍数
N = int(np.round(2 * value / np.pi))
if N == 0:
return "0" # 0点
elif N == 1:
return r"$\frac{\pi}{2}$" # pi/2
elif N == 2:
return r"$\pi$" # pi
elif N % 2 > 0:
return r"$\frac{{%d}\pi}{2}$" %N # n*pi/2 n是奇数
else:
return r"${0}\pi$".format(N // 2) # n*pi n是整数
ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func))
fig
上图看起来好多了。注意到我们使用到了 Matplotlib 的 LaTeX 支持,使用美元符号将 LaTeX 字符串括起来。这是用来展示数学符号和公式的简便方法:在这个例子中"plt.FuncFomatter()提供了对于图表刻度最高级的自定义和精细控制,并且当你需要创建需要印刷或出版的图表时非常方便。Formatter 和 Locator 总结我们已经介绍了一些 formatter 和 locator。在最后我们通过将內建的 locator 和 formatter 参数列出来对本节做一个总结。要获得更多相关内容,请参阅文档或 Matplotlib 的在线文档。下表中列出的对象在plt命名空间中都是有效的:NullLocatorFixedLocator固定刻度位置IndexLocator序号图表刻度 (例如 x = range(len(y)))LinearLocator从最小到最大值的均匀分割刻度LogLocator从最小到最大值的对数分割刻度MultipleLocator某个基数的倍数刻度MaxNLocator刻度数量最大值AutoLocator默认的刻度数量最大值AutoMinorLocator默认的次要刻度NullFormatterIndexFormatter从一个列表获得标签FixedFormatter从固定的字符串设置标签FuncFormatter使用自定义函数设置标签FormatStrFormatter使用一个格式化字符串设置标签ScalarFormatter默认的标量标签LogFormatter默认的对数标签11.在 matplotlib 中创建三维图表Matplotlib 最开始被设计为仅支持二维的图表。到 1.0 版本发布左右,一些三维图表的工具在二维展示的基础上被创建了出来,结果就是 Matplotlib 提供了一个方便的(同时也是有限的)的可用于三维数据可视化的一套工具。三维图表可以使用载入mplot3d工具包来激活,这个包会随着 Matplotlib 自动安装:from mpl_toolkits import mplot3d
一旦模块被导入,三维 axes 就可以像其他普通 axes 一样通过关键字参数projection='3d'来创建:%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
三维 axes 激活后,我们可以在上面绘制不同的三维图表类型。三维图表在 notebook 中使用交互式图表展示会优于使用静态展示;回忆我们前面介绍过,你可以使用%matplotlib notebook而不是%matplotlib inline来激活交互式展示模式。三维的点和线三维图表中最基础的是使用(x, y, z)坐标定义的一根线或散点的集合。前面介绍过普通的二维图表,作为类比,使用ax.plot3D和ax.scatter3D函数可以创建三维折线和散点图。这两个函数的签名与二维的版本基本一致,你可以参考[简单折线图]和[简单散点图]来复习一下这部分的内容。下面我们绘制一个三维中的三角螺旋,在线的附近在绘制一些随机的点:ax = plt.axes(projection='3d')
# 三维螺旋线的数据
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline, 'gray')
# 三维散点的数据
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='Greens');
注意默认情况下,图中的散点会有透明度的区别,用于体现在图中散点的深度。虽然三维效果在静态图像中难以显示,你可以使用交互式的视图来获得更佳的三维直观效果。三维轮廓图类似于我们在[密度和轮廓图]中介绍的内容,mplot3d也包含着能够创建三维浮雕图像的工具。就像二维的ax.contour图表,ax.contour3D要求输入数据的格式是二维普通网格上计算得到的 Z 轴的数据值。下面我们展示一个三维的正弦函数轮廓图:def f(x, y):
return np.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');
有时候默认的视角角度不是最理想的,在这种情况下我们可以使用view_init函数来设置水平角和方位角。在下面的例子中,我们使用的是 60° 的水平角(即以 60° 俯视 x-y 平面)和 35° 的方位角(即将 z 轴逆时针旋转 35°):ax.view_init(60, 35)
fig
同样,注意到当使用 Matplotlib 交互式展示是,这样的旋转可以通过鼠标点击和拖拽来实现。框线图和表面图使用网格数据生成的三维图表还有框线图和表面图。这两种图表将网格数据投射到特定的三维表面,能够使得结果图像非常直观和具有说服力。下面是一个框线图的例子:fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black')
ax.set_title('wireframe');
表面图类似框线图,区别在于每个框线构成的多边形都使用颜色进行了填充。添加色图用于填充多边形能够让图形表面展示出来:ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap='viridis', edgecolor='none')
ax.set_title('surface');
注意虽然每个颜色填充的表面都是二维的,但是表面的边缘不需要是直线构成的。下面的例子使用surface3D绘制了一个部分极坐标网格,能够让我们切入到函数内部观察效果:r = np.linspace(0, 6, 20)
theta = np.linspace(-0.9 * np.pi, 0.8 * np.pi, 40)
r, theta = np.meshgrid(r, theta)
X = r * np.sin(theta)
Y = r * np.cos(theta)
Z = f(X, Y)
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap='viridis', edgecolor='none');
表面三角剖分在一些应用场合中,上面的这种均匀网格绘制的图表方式太过于局限和不方便。在这些情况下,三角剖分的图表可以派上用场。如果我们并不是使用笛卡尔坐标系或极坐标系的网格来绘制三维图表,而是使用一组随机的点来绘制三维图表呢?theta = 2 * np.pi * np.random.random(1000)
r = 6 * np.random.random(1000)
x = np.ravel(r * np.sin(theta))
y = np.ravel(r * np.cos(theta))
z = f(x, y)
有了上面的数据之后,我们可以使用它们来绘制一张散点图表现出样本所在表面的情况:ax = plt.axes(projection='3d')
ax.scatter(x, y, z, c=z, cmap='viridis', linewidth=0.5);
上图并未形象的表示出表面情况。这种情况下我们可以使用ax.plot_trisurf函数,它能首先根据我们的数据输入找到各点内在的三角函数形式,然后绘制表面(注意的是这里的 x,y,z 是一维的数组):ax = plt.axes(projection='3d')
ax.plot_trisurf(x, y, z,
cmap='viridis', edgecolor='none');
上图的结果很显然没有使用网格绘制表面图那么清晰,但是对于我们并不是使用函数构建数据样本(数据样本通常来自真实世界的采样)的情况下,这能提供很大的帮助。例如我们下面会看到,能使用这种方法绘制一条三维的莫比乌斯环。例子:绘制莫比乌斯环theta = np.linspace(0, 2 * np.pi, 30)
w = np.linspace(-0.25, 0.25, 8)
w, theta = np.meshgrid(w, theta)
phi = 0.5 * theta
# r是坐标点距离环形中心的距离值
r = 1 + w * np.cos(phi)
# 利用简单的三角函数知识算得x,y,z坐标值
x = np.ravel(r * np.cos(theta))
y = np.ravel(r * np.sin(theta))
z = np.ravel(w * np.sin(phi))
最后,为了绘制对象,我们必须保证三角剖分是正确的。实现这个最好的方法是在底层的参数上面实现三角剖分,最后让 Matplotlib 将这个三角剖分投射到三维空间中形成莫比乌斯环。下面的代码最终绘制图形:# 在底层参数的基础上进行三角剖分
from matplotlib.tri import Triangulation
tri = Triangulation(np.ravel(w), np.ravel(theta))
ax = plt.axes(projection='3d')
ax.plot_trisurf(x, y, z, triangles=tri.triangles,
cmap='viridis', linewidths=0.2);
ax.set_xlim(-1, 1); ax.set_ylim(-1, 1); ax.set_zlim(-1, 1);
结合这些技巧,能够为你提供在 Matplotlib 创建和展现大量三维对象和模式的能力。参考资料[1]PythonDataScienceHandbook:https://github.com/jakevdp/PythonDataScienceHandbook/tree/master/notebooks[2]Pythons数据科学:https://github.com/wangyingsm/Python-Data-Science-Handbook/tree/master/notebooks[3]颜色代码:https://www.w3schools.com/colors/colors_names.asp[4]秒差距:https://zh.wikipedia.org/wiki/%E7%A7%92%E5%B7%AE%E8%B7%9D[5]有趣讨论:http://Matplotlib.org/1.4.1/users/colormaps.html[6]标注演示:http://matplotlib.org/examples/pylab_examples/annotation_demo2.html}

作者:超帅忘黄豆
发布时间:2023-06-06 01:22:36
浏览量:467次
在影视后期这一块,AE的就业前景是非常不错的,可以直白的说AE是后期制作的顶梁柱,一般应用在MG动画里,片头片尾制作,企业宣传片、抠图、抠像 、综艺节目制作等等。很多想学AE的同学,不知道该去哪里学,今天就来说说,杭州AE动画培训哪个机构好?想学好AE动画,一般要求掌握:AE基础操作与基本动画制作这部分包括软件界面和流程讲解、快捷键应用、常用工具应用、素材应用等;合成层创建和概念、素材基本属性、创建关键帧动画和修改、多层排列操作等。工具运用曲线调整动画在这个阶段要掌握遮罩创建、编辑方式与属性动画、形状层创建与实现多种图形动画、变速动画等以及图层混合模式中常见合成方式、文本工具和路径应用字符动画实现的多种属性和控制器。AE图层蒙版类特效图层蒙版合成效果、绘制特效与图层混合模式、实现图形出现变形等动画、描边分别实现图形动画或文字表现。AE视觉特效素材制作与动态抠像在这个学习阶段,关于分形噪波实现多种纹理图形动画、扭曲特效实现纹理图形动画通过色彩校正为图形或纹理着色、常用色彩校正特效中调色方式多种蓝绿幕抠像合成处理方式和细节调整是要了解的。AE模拟特效后期调速这一块的内容主要围绕模拟特效初识简介、破碎特效重要属性特征讲解、制作破裂碎片和飘飞聚拢效果后期中调速或定格、粒子生成形式、素材替换等、粒子实例动画幻影软件便捷生成多种粒子特效动画、幻影软件动画导出与合成。AE插件应用调整图层像3d描边动画制作片头素材调整图层同时实现多层共同效果调整、星光效果制作闪光视觉粒子插件制作炫目线条出字片头等等。并不是十分复杂,却也是不易精通的,所以想要掌握AE动画,建议来火星时代报个培训班。这里的老师在影视行业有多年经验,课程的研发是根据企业岗位需要的,具有较强的岗位定向性,感兴趣的同学可以来官网报名咨询~}

我要回帖

更多关于 ae修改时间总长 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信