python的matplotlib库,python 绘图库Matplotlib
Matplotlib是一个用Python绘制数组的二维图形库。它起源于模仿MATLAB的图形命令,但它独立于MATLAB,可用于Pythonic和面向对象。Matplotlib主要用纯Python编写,但也经常使用NumPy等扩展代码,可以为大型数组提供优秀的性能。
有许多不同的方法来安装matplotlib,但最简单的方法是使用pip。
pistallMATPLOTLIB 2 . pyplotmaplotlib . pyplot是命令样式函数的集合,这使得matplotlib机制类似于MATLAB。对于每个绘图函数,对图表进行一些更改,包括创建一个图表,在图表中创建一个绘图区,在绘图区中绘制线条,以及用标签装饰绘图。在matplotlib.pyplot中,为了跟踪当前的图表、绘图区等。各种状态会跨函数调用保存,绘图函数始终指向当前轴区域。
注意:此处和文档中大多数地方的“轴”是指图形的一部分(由两个坐标轴围成的区域),而不是多个轴的严格数学术语。
importmatplotlib . pyplotasplt . plot([1,2,3,4])PLT . ylabel)( numbers )PLT . show)).
你可能想知道为什么X轴的范围是0-3,Y轴的范围是1-4。Plot))当为一个命令提供单个列表或数组时,matplotlib会自动生成x值,假设它是y值的序列。因为python的范围从0开始,所以默认的x向量与y的长度相同,但从0开始。因此,x数据为[0,1,2,3]。
Plot))是一个通用命令,可以接受任意数量的参数。例如,要绘制x和y,请运行命令。
importmatplotlib . pyplotasplt . plot([ 1,2,3,4 ],[1,4,9,16 ] ) PLT.ylabel)“数字”(PLT.show).
每个x和y参数对都有一个可选的第三个参数。这是显示图形颜色和线型的格式字符串。格式字符串的字符和符号来自MATLAB,它将颜色字符串与行字符串链接起来。默认格式字符串是 b-,它是一条蓝色实线。例如,要绘制上面的红色圆圈,您必须执行以下操作:
importmatplotlib . pyplotasplt . plot([ 1,2,3,4 ],[1,4,9,16 ], ro ) PLT.axis ) [ 0,6,0,20 ])
有关线型和格式字符串的完整列表,请参考plot)文档。上面示例中的axis(命令接收“xmin,xmax,ymin,ymax”列表,并指定axis域的可见区域。
Matplotlib接受以下格式的字符串来控制线型和标记:
描述-实线-虚线-单点连线:单点连线,像素 o 圆圈 v 下三角形上三角形左三角形右三角形 11 加上下三角形 2
颜色如果字符颜色 b blue g green r red c blue m magenta y yellow k black w white matplotlib仅限于使用列表,在数字处理中是相当浪费的。一般来说,可以使用numpy数组。实际上,所有序列都在内部转换成numpy数组。此示例显示了如何使用不同于数组格式的字符串在一个命令中绘制多行:
importnumpyasnpimportmatplotlib . pyplotasplt # evenlsampledtimeat 200 msintervalst=NP . arange(0.5。0.2)reddashashalst))red bue squaresandgreentrianglesplt . plot(t,t, r -,t,t ** 2, bs ,t,t ** 3,
3.可以为控制行属性的行设置许多属性。线宽、虚线样式、抗锯齿等。请参见matplotlib.lines.Line2D.有几种方法可以设置线条属性。
Use关键字参数:使用PLT.plot(x,y,linewidth=2.0) Line2D实例的setter方法。Plot返回Line2D对象的列表,例如line1,line2=plot(x1,y1,x2,y2)。下面的代码假设只有一行,返回列表的长度为1。我们用元组求解行来得到这个列表的第一个元素。Line,=PLT.plot(x,y,-)line . set _ antialiased(false))#关闭抗锯齿是setp)。以下示例使用MATLAB风格的命令。
在线条列表上设置多个属性。Setp透明地处理对象列表或单个对象。您可以使用python关键字参数或MATLAB样式的字符串/值对:lines=plt.plot(x1,y1,x2,y2)#使用关键字参数plt.setp(lines,color=r ,Linewidth=2.0)#或MATLAB样式的字符串值对PLT.setp (lines, color , r , Linewidth ,2.0)以下是可用的Line2D属性:
属性值alpha浮点值animated [true/false] aliased或aa[true/false]clip _ boxmatplotlib . transform . bbox实例clip _ on[true/false]clip _ path path实例、Transform和Patch实例color或c任何matplotlib颜色都包含hits测试函数dash _ cap style[ butt / round / projecting ]dash _ join style[ miter / round / bevel ]破折号/断开以点表示的墨迹序列数据(NP。数组XData,NP。array data)figure matplotlib . figure . figure实例标签任何字符串线型或ls[-//-/:/步数/…]线宽或lw浮点值LOD[True/False]标记[ /,/ . / 1 / 2 / 3 / 4 ]marked gecolor或mec any matplotlib color marked gewidth或mew浮点值markerfacecolor或MFC any matplotlib color marker size或ms浮点值marker every[None/integer value/(startind,Stride)]选择器用于交互式行选择。pickradius线的pick radius solid _ cap style[ butt / round / projection ]solid _ joint style[ miter / round / bevel ]TransformPlotlib。转变。转换实例可见[真/假]xdatnp。ArrayDatanp。ArrayZorder任意数值4。处理多个图形和轴域MATLAB和pyplot都有当前图形和当前轴域的概念。所有绘图命令都适用于当前轴字段。函数gca()返回当前轴字段(matplotlib.axes.Axes的实例),gcf()返回当前图形(matplotlib.figure.Figure的实例)。通常情况下,你不用担心这些,因为这些都是在幕后处理的。下面是创建两个子图的脚本。
将matplotlib.pyplot导入为PLT def f(t):return NP . exp(-t)* NP . cos(2 * NP . pi * t)t1=NP . arange(0.0,5.0,0.1)t2=np.arange(0.0,5.0,0.02)PLT . figure(1)PLT . subplot(211)PLT . plot(t1,f(t1), bo ,t2,f(t2), k )PLT . subplot(22
这里的figure()命令是可选的,因为figure(1)是默认创建的,如果没有手动指定任何轴域,默认会创建subplot(111)。subplot()命令指定numrows、numcols和fignum,其中fignum的范围是从1到numrows * numcols。如果numrows * numcols 10,从属命令中的逗号是可选的。因此,子图子曲线(211)与子曲线(2,1,1)相同。您可以创建任意数量的子图和轴字段。
如果要手动放置轴字段,即不在矩形网格上,请使用axes()命令,该命令允许您指定轴([左、下、宽、高])作为位置,其中所有值都使用十进制(0到1)坐标。有关手动放置轴字段的示例,请参见pylab_examples示例代码:axes_demo.py,有关包含大量子图的示例,请参见pylab_examples示例代码:subplots_demo.py。
您可以通过多次调用figure()来创建多个图形,并增加图形编号。当然,每个数字可以包含所需数量的轴和子图:
将plotlib.py plot导入为pltplt.figure (1) #第一个图plt.subplot(211) #第一个子图plt.plot ([1,2,3]) plt.plot (212) #第二个子图plt . PLT .第一个图PLT(6))PLT . figure(2)#第二个图PLT .PLT ([4,5,6]) # subplot(111)plt.show()是默认创建的。可以使用clf()清除当前图形,使用cla()清除当前轴字段。如果你搞不清楚幕后维护的状态(尤其是当前的图形和轴字段),不要绝望:它只是一个面向对象API的简单状态包装器。可以使用面向对象的API(见美工教程)。
如果是制作大量图形,需要注意一点:在用close()显式关闭一个图形之前,图形所需的内存不会被完全释放。删除所有对图形的引用,和/或使用窗口管理器杀死出现在屏幕上的图形窗口是不够的,因为pyplot在调用close()之前维护内部引用。
5.处理文本。text()命令可用于在任意位置添加文本,而xlabel()、ylabel()和title()用于在指定位置添加文本(详细示例见文本介绍)。
import numpy as NP import matplotlib . py plot as pltmu,sigma=100,15x=musi GMA * NP . randn(10000)#直方图数据n,bin,patches=plt.hist(x,50,density=1,facecolor=g ,alpha=0.75)PLT . xlabel( Smarts )PLT . ylabel( Probability )PLT . title(直方图of IQ)plt.text(60, 025
所有text()命令都返回一个matplotlib.text.Text实例。如上所述,您可以通过向文本函数传递关键字参数或使用setp()来自定义属性:
T=plt.xlabel(我的数据,fontsize=14,color= red )。有关这些属性的更详细描述,请参见文本属性和布局。
6.在文本中使用数学表达式matplotlib来接受任何文本表达式中的TeX方程表达式。例如,要在标题中编写一个表达式,可以编写一个由美元符号包围的TeX表达式:
plt.title的标题字符串前的R(R $ \ sigma _ I=15 $ )很重要——它表示该字符串是原始字符串,而不是将反斜杠视为python转义。Matplotlib有一个内置的TeX表达式解析器和布局引擎,它自带数学字体——详见编写数学表达式。因此,您可以在不安装TeX的情况下跨平台使用数学文本。对于安装了LaTeX和dvipng的用户,还可以使用LaTeX格式化文本,并将输出直接合并到显示的图形或保存的postscript中——参见LaTeX文本渲染。
7.注释文本上方的text()基本命令将文本放置在轴域中的任何位置。文本的一个常见用法是注释一个图的一些特征,annotate()方法提供了一些辅助功能,使注释变得容易。标注时,需要考虑两点:参数xy表示的标注位置和xytext表示的文本位置。两个参数都是(x,y)元组。
import numpy as NP import matplotlib . py plot as PLT fig,ax=PLT . subplots()t=NP . arange(0.0,5.0,0.01)s=np.cos(2 * np.pi * t)line,=ax.plot(t,s,lw=2)ax.annotate(local max ,xy=(2,1),xytext=(3,1.5),arrow props=dict(face color= black ,shrink=0.05),)ax .
在这个基本示例中,xy(箭头)和xytext(文本)位于数据坐标中。有多种其他坐标系可供选择-详情请参见尺寸文本和尺寸轴字段。更多示例可以在pylab_examples示例代码中找到:annotation_demo.py
8.对数等非线性轴matplotlib.pyplot不仅支持线性轴刻度,还支持对数和对数刻度。如果数据跨越多个数量级,通常使用。很容易改变轴的比例:
Plt.xscale(log )以下示例显示了具有相同数据和不同Y轴刻度的四个图形。
import numpy as NP import matplotlib . py plot as PLT #在区间[0,1] y=np.random.normal (loc=0.5,scale=0.4,Size=1000)Y=Y[(Y 0)(Y 1)]Y . sort()x=NP . arange(len(Y))# plot PLT . figure(1)# linear PLT . subplot(221)PLT . plot(x,Y) PLT。YScale(“线性”)PLT。标题(“线性”)PLT。Grid (true) #对数PLT . subplot(222)PLT . PLT(x,Y) PLT。y scale(“log”)PLT。标题(“日志”)PLT。Grid (true) #对称对数PLT。子情节(223)情节。PLT(x,y-y.mean())。YScale (symlog ,linthreshy=0.05)PLT . title( symlog )PLT . grid(True)# logit PLT . subplot(224)PLT . plot(x,y)PLT . y scale( logit )PLT . title( logit )PLT . grid(True)PLT . show()
也可以添加自己的秤。有关详细信息,请参见向matplotlib添加新的比例和投影。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。