Python数据可视化利器Matplotlib从入门到高级4

Python014

Python数据可视化利器Matplotlib从入门到高级4,第1张

2D曲线绘制是Matplotlib绘图的最基本功能,也是用得最多、最重要的绘图功能之一,本文开始详细介绍Matplotlib 2D曲线绘图功能。我的介绍主要以面向对象的编码风格为主,但会在文章的末尾附上相应的pyplot风格的源代码,供大家查阅、对比。我们先看一段代码:

代码运行效果如下:

这个绘图中我们没有作任何设置,一切交给Matplotlib处理。我们只是看到了绘制出的曲线的样子。但这与我们所想要的效果可能差异较大。所以我们还需要对图形进行一些自定义。

不管我们想生成什么样的图形,在Matplotlib当中,大致都可以总结为三步:一是构造绘图用的数据(Matplotlib推荐numpy数据,本系列介绍Matplotlib绘图,暂不涉及numpy的相关内容,留待后续有空余时吧);二是根据数据的特点选择适当的绘图方法并绘制出数据的图形;第三步则是对绘制的图形进行自定义设置或者美化以达到满足我们获得精美的输出图形的要求。

在上面的绘图中,我们仅仅做到了第二步,下面我们来进行一些自定义,而Matplotlib为此提供了非常丰富的功能。

你可能最想先尝试一下换个颜色看看曲线是什么样的,这有很多种方法。首先,我们可以在绘制图形的时候直接指定它,我们把绘图的代码改成下面的样子:

这里的 ‘r’ 是 “red”的简写,表示将曲线的颜色指定为红色。也可以写成下面的样子,这样可读性更高:

plot 返回一个 Line2D 对象的列表,我们使用一个带有“ line1, ”的元组来解包,随后使用 set_color() 代码设置line1 曲线的颜色,请注意这里设置的颜色会覆盖 plot 绘图函数当中指定的颜色。上面三段代码各自独立运行之后的效果是一样的。如下:

为了提高效率,Matplotlib模仿MATLAB支持常用颜色的单字母代码缩写。

你还可以使用不区分大小写的十六进制 RGB 或 RGBA 字符串(如:'#0f0f0f'),或者不区分大小写的 X11/CSS4 颜色名称(如:'aquamarine'),以及来自 xkcd color survey 的不区分大小写的颜色名称(如:'xkcd:sky blue')等等。更为详细的颜色规范,你可以查阅官方文档。但对于Python办公而言,掌握这些应该已经足够了。

与曲线颜色一样,线型和线宽也有多种方式来指定:

这里我们最终指定的线宽为2.0磅,绘图函数当中指定的线宽被后续指定的属性值覆盖了。而线型在这里由set_linestyle()指定,其中“--”和“-.”都是Matplotlib中支持的线型,“--”表示虚线,而“-.”则是点划线。而Matplotlib默认的线型“-”实线,除此之外,Matplotlib还支持“:”点线。

我们绘制曲线之前构造的数据点在曲线上也可以标记出来,这些标记点有不同的风格。同样可以以不同的方式来设置它:

注意第一行代码当中的“r:o”字符串,它是一种简写形式,是将颜色、线型和标记点形状在一个字符串中同时设置的方式,其中的“r”表示红色,“:”表示点线,“o”表示标记点为大圆点。只有在颜色使用单字符代码时才可以像上面这样组合起来同时表示三个属性。默认情况下,标记点的颜色与线型颜色相同,但可以单独设置与曲线不同的颜色,不仅如此,标记点的边线颜色和中间填充颜色也都可以单独设置。上面第二行代码我们就使用set_markeredgecolor('b')将标记点边线颜色设置为了蓝色。与标记点设置相关的还有set_marker(设置标记点形状)、set_markeredgewidth(设置标记点边线宽度)、set_markerfacecolor(设置标记点中间的填充色)、set_markersize (设置标记点的大小)等。下面是我整理的Matplotlib支持的所有标记点形状。

本文先介绍到此,后续进一步介绍坐标轴、图例和网格线的设置。最后附上本文pyplot风格的绘图代码:

显然这种简单绘图pyplot风格要简洁一些,还是很有优势的。

1.importmatplotlib.pylab as plt。

2. plt.ylabel([string])设置y轴文字;x轴同理。

3. plt.show()显示图。

4.plt([array1],[array2],[string],linewidth=[float]),依次代表x值,y值,数据点的样式。只有一个array则默认为y值,x值为range(len(y)),点的样式为'colorshape',默认为'b-'(蓝色实线),还比如'ro'(红色圆点),'k^'(黑色三角),'g--'(绿色虚线),默认都是填充的。可以串联参数一张图上作多条线。linewidth是线宽。