Matplotlib(一)—— 基础

Matplotlib(一)—— 基础

大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。

   Matplotlib是一个Python2D绘图库,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态、动态、交互式的图表。它已经成为python中公认的数据可视化工具,我们所熟知的pandas和seaborn的绘图接口其实也是基于matplotlib所作的高级封装。
   Matplotlib的图像是画在figure(如windows,jupyter窗体)上的,每一个figure又包含了一个或多个axes(一个可以指定坐标系的子区域)。最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。

plt.figure(num,figsize,dpi,facecolor,edgecolor,frameon,FigureClass,clear)

  • num:默认None,若给定num,则说明图形已存在,反之,则创建新的图形;
  • figsize:默认None,以(float,float)形式输入,指宽和高;
  • dpi:float,图形的分辨率;facecolor:背景色;edgecolor:边框颜色;frameon:默认True,若为False,则禁止绘制图形框;
  • FigureClass:指使用自定义Figure实例;
  • clear:默认False,若为True且图形已存在,则将其清除;

一、Matplotlib Artist

1.1 Matplotlib的标准用法

  • 创建一个Figure实例;
  • 使用Figure实例创建一个或多个Axes或Subplot实例;
  • 使用Axes实例的辅助方法来创建primitive;

1.2 Matplotlib的三层api

  • matplotlib.backend_bases.FigureCanvas:代表了绘图区,所有的图像都是在绘图区完成的;
  • matplotlib.backend_bases.Renderer:代表了渲染器,可以近似理解为画笔,控制如何在FigureCanvas上画图;
  • matplotlib.artist.Artist:代表了具体的图表组件,即调用了Renderer的接口在Canvas上作图;
  • 前两者处理程序和计算机的底层交互的事项,第三项Artist就是具体的调用接口来做出想要的图,如图形、文本、线条的设定;通常来说,我们95%的时间,都是用来和Artist类打交道的;

1.3 Artist的分类

   matplotlib中有两种Artist

  • primitive:代表了在绘图区域上绘制的基础的绘图组件,如曲线Line2D、矩形Rectangle、文字Text及图像AxesImage等;
  • container:代表了放置primitive的那些绘图组件,如坐标轴Axis、坐标系Axes及图形Figure;

1.4 Artist的属性

   在图形中的每一个元素都对应着一个matplotlib Artist,且都有其对应的配置属性列表。

  • Figure.patch(plt.figure().patch):是一个Rectangle,代表了图表的矩形框,它的大小就是图表的大小, 并且可通过它设置figure的背景色和透明度;
  • Axes.patch(plt.axes().patch):也是一个Rectangle,代表了绘图坐标轴内部的矩形框(默认白底黑边),可通过它设置Axes的颜色、透明度等;
  • 每个matplotlib Artist都有以下属性:.alpha属性(透明度,值为0—1之间的浮点数)、.axes属性(返回这个Artist所属的axes,可能为None)、.figure属性(该Artist所属的Figure,可能为None)、.label(一个text label)、.visible(布尔值,控制Artist是否绘制)等;
  • Artist属性列表

1.5 Artist属性的调用

  • matplotlib.artist.getp(obj, property=None) 或 plt.getp(obj,···):若参数property=None,则返回obj的所有属性和值;若property=‘alpha’,则返回obj的该属性值;
  • matplotlib.artist.setp(obj,alpha=0.5,···)/plt.setp(obj,···):设置属性(可设置一个/多个属性);
  • 对于一个属性的话,还可为:obj.get_alpha()、obj.set_alpha(0.5)等;

二、基本元素 - primitives

   Artist包含两种对象:primitives和containers。
   primitives是基本要素,它包含一些我们要在绘图区作图用到的标准图形对象,如曲线Line2D、文本text、矩形Rectangle、图像image等。

2.1 2DLines

2.1.1 如何设置Line2D的属性
  • 直接在plot()函数中设置,如plt.plot(a,color=‘c’,marker=‘8’,markeredgecolor=‘r’)
  • 获得线对象,对线对象进行设置
  • 获得线属性,使用setp()函数设置
''' plot()的设置 '''
linewidth:线条的宽度
linestyle:线型,如(实线('solid''-')、点虚线('dotted'':')、破折线('dashed''--')、点划线('dashdot''-.'))
color:线条的颜色,如('r'红色、'g'绿色、'b'蓝色、'c'青色、'm'品红、'y'黄色、'k'黑色、'w'白色)
marker:点的标记,如("."点、","像素点、"o"实心圆、"^"上三角、"8"八角形、"*"星号等)
markersize:标记的大小
markerfacecolor:标记内部的颜色
markeredgecolor:标记边框的颜色

''' set_antialiased '''
line, = plt.plot(x, y, '-')
line.set_antialiased(False) # 关闭抗锯齿功能

''' setp() '''
lines = plt.plot(x, y)
plt.setp(lines, color='r', linewidth=10) 
2.1.2 如何绘制lines
  • 绘制直线line常用的方法:pyplot、Line2D;
  • 绘制误差折线图的方法:plt.errorbar(x,y,yerr,xerr,···);

2.2 patches

   matplotlib.patches.Patch类是二维图形类,查看函数可用help(matplotlib.patches.Patch)。

2.2.1 矩形Rectangle

   Rectangle矩形类在官网中的定义:通过锚点xy及宽度和高度生成;Rectangle本身比较简单,即xy控制锚点,width和height分别控制宽和高。其函数是:matplotlib.patches.Rectangle(xy, width, height, angle=0.0),在实际中最常见的矩形图是hist直方图和bar柱状图。

plt.hist(x,bins,range,density,weights,cumulative,bottom,histtype,align,orientation,rwidth,log,color,label,stacked)

  • x:数据集; bins:统计的区间分布(整数,序列,字符串);
  • range:默认None,若用tuple,则表示箱子的上下限;
  • density:默认False,显示频数统计结果;若为True,则显示频率统计结果;注:频率统计结果=区间数目/(总数*区间宽度);
  • histtype:默认bar,还可选barstacked/step/stepfilled;
  • align:默认mid,还可选left/right;
  • log:默认False,即y坐标轴是否选择对数刻度;
  • stacked:默认为False,是否为堆积状图;

plt.bar(x,height,width,bottom,align)

  • x/height:相当于xy轴的数据;
  • width:默认0.8,柱状图的宽度;
  • 可有其他参数:alpha、color、edgecolor、linewidth等;
2.2.2 多边形Polygon

   Polygon类是多边形类,其函数是:matplotlib.patches.Polygon(xy, closed=True, **kwargs)

  • xy:是一个N×2的numpy array,为多边形的顶点;
  • closed:为True时,则指定多边形将起点和终点重合从而显式关闭多边形;

plt.fill(*args, data=None, **kwargs)
它是基于xy绘制一个填充的多边形。

2.2.3 契形Wedge

   matplotlib.patches.Wedge(center, r, theta1, theta2, width=None, **kwargs)
一个契形Wedge,是以坐标x,y为中心,半径为r,从theta1扫到theta2(单位是度)。
如果宽度给定,则从内半径r-width到外半径r画出部分楔形。
Wedge中比较常见的是绘制饼图pie。

plt.pie(x,explode,labels,colors,autopct,pctdistance,shadow,labeldistance,startangle,radius,counterclock,wedgeprops,textprops,center,frame,rotatelabels,normalize)

  • 制作数据x的饼图,每个楔子的面积用 x/sum(x) 表示;
  • x:一维数组; explode:数组,默认None,表示各个扇形之间的间隔;
  • labels:列表,默认None,各个扇形的标签;
  • colors:列表/数组,默认None,各个扇形的颜色;
  • autopct:默认None,设置饼图内各扇形百分比显示格式,如:%d%% 整数百分比、%0.1f 一位小数、%0.1f%% 一位小数百分比、%0.2f%% 两位小数百分比;
  • labeldistance:默认1.1,标签标记的绘制位置,相对于半径的比例,若<1则绘制在饼图内侧;
  • pctdistance:默认0.6,类似于labeldistance,指定autopct的位置刻度;
  • shadow:默认False,不设置阴影; radius:默认1,设置饼图的半径;
  • startangle:起始绘制饼图的角度,默认从x轴正方向逆时针画起;若为90则从y轴正方向画起;
  • counterclock:默认True,则逆时针;False为顺时针;
  • wedgeprops :字典类型,默认None。参数字典传递给Wedge对象用来画一个饼图。如wedgeprops={‘linewidth’:5}设置wedge线宽为5;
  • textprops :字典类型,默认None。传递给text对象的字典参数,用于设置标签(labels)和比例文字的格式;

2.3 collections

   collections类是用来绘制一组对象的集合,collections有许多不同的子类,如RegularPolyCollection, CircleCollection, Pathcollection, 分别对应不同的集合子类型。常用的是散点图,即根据x与y绘制不同大小或颜色标记的散点图。

plt.scatter(x,y,s,c,marker,cmap,norm,vmin,vmax,alpha,linewidths,edgecolors,plotnonfinite,data,**kwargs)

  • x/y:x/y轴上的数据; s/c:标记的大小/颜色;
  • marker:标记的类型,如实心圆、点、上三角等;
  • cmap:默认 None,标量或一个colormap的名字,只有c是一个浮点数数组的时才使用;如果没有申明就是image.cmap;
  • norm:默认 None,数据亮度在 0-1 之间,只有c是一个浮点数的数组的时才使用;
  • vmin/vmax:亮度设置,在norm参数存在时会忽略;

2.4 images

   images是matplotlib中绘制image图像的类,其中最常用的imshow可以根据数组绘制成图像。

plt.imshow(X,cmap,norm,aspect,interpolation,alpha,vmin,vmax,origin,extent,interpolation_stage,filternorm,filterrad,resample,url,data,**kwargs)

   使用imshow画图时,首先需要传入一个数组X,数组对应的是空间内的像素位置和像素点的值,interpolation参数可以设置不同的差值方法。


三、对象容器 - container

   Artist包含两种对象:primitives和containers。
   container是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes、坐标轴Axis。

3.1 图形figure

   matplotlib.figure.Figure是Artist最顶层的容器,它包含了图表中的所有元素。一张图表的背景就是在Figure.patch的一个矩形Rectangle。当我们向图表添加Figure.add_subplot()或Figure.add_axes()元素时,这些都会被添加到Figure.axes列表中;通过Figure.delaxes()来删除元素。

3.2 坐标系Axes

   matplotlib.axes.Axes是matplotlib的核心。大量的用于绘图的Artist存放在它内部,并且它有许多辅助方法来创建和添加Artist给它自己,而且它也有许多赋值方法来访问和修改这些Artist。
   它有许多方法用于绘图,如.plot()、.text()、.hist()、.imshow()等方法用于创建大多数常见的primitive(如Line2D,Rectangle,Text,Image等等)。这些方法会创建primitive Artist实例,并且添加这些实例到对应的container上去,然后必要的时候会绘制这些图形。

3.3 坐标轴Axis

   matplotlib.axis.Axis实例处理tick line、grid line、tick label以及axis label的绘制,它包括坐标轴上的刻度线、刻度label、坐标网格、坐标轴标题。通常你可以独立的配置y轴的左边刻度以及右边的刻度,也可以独立地配置x轴的上边刻度以及下边的刻度。


谢谢大家 🌹

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值