Matplotlib 线性图,图表的所有类型中,线性图最为简单,线型图的各个数据点由一条线来连接,一对对(x, y)值组成的数据点在图表中的位置取决于两条轴(x和y)的刻度范围。
本文会介绍为函数绘制线型图、如何改变线性图的颜色,线型及x
,y
轴的刻度标签、绘制笛卡尔坐标系及Pandas
数据结构绘制线型图。学习本章内容前前可以先了解NumPy 创建数组和Pandas 创建DataFrame,更多知识可以参考极客教程Numpy和极客教程Pandas。
简单函数线性图
举例来说,你可以绘制由数学函数生成的数据点,比如为一个普通函数的图像作图:
为此我们需要创建两个Numpy数组,首先创建包含x
值的数组,用作x
轴。我们使用np.arange()
函数定义一个元素递增的序列。然后,用np.sin()
函数可直接求得这一列x
值所对应的y
值。
完成上述运算后,再调用plot()函数绘制图像即可,如下所示:
输出结果如下:
扩展这个例子,显示如下函数的图像: y = sin(n*x)/x,如下所示,matplotlib
自动为每条线分配一种不同的颜色。
输出结果如下:
改变线型、颜色和刻度标签
极客教程前面章节Matplotlib Numpy有介绍到,我们可以自己选择线型、颜色等。可以用plot()
函数的第三个参数指定颜色(如下表所示)、线性,把这些设置所用的字符编码放到同一个字符串即可。你还可以使用两个单独的关键字参数,用color
指定颜色,用linestyle
指定线性。
编码 | 颜色 |
---|---|
b |
蓝色 |
g |
绿色 |
r |
红色 |
c |
蓝绿色 |
m |
洋红 |
y |
黄色 |
k |
黑色 |
w |
白色 |
输出结果如下:
x
轴的数值范围为-2π ~ 2π
,但是刻度标签默认使用数值形式,你需要用π
的倍数代替数值。同理,你也可以替换y
轴刻度的标签,方法是使用xticks()
和yticks()
函数,分别为每个函数传入两列数值:第一列表存储刻度的位置,第二个列表存储刻度的标签。
在这个例子中,要正确显示符号π
,需要使用含有LaTex表达式的字符串,记得将其置于两个$
之中,并在前面加上r
前缀,如下所示:
输出结果如下:
笛卡儿坐标系
前面所见的线型图,x
轴和y
轴总是置于Figure的边缘(跟图像的边框重合)。另外一种显示轴的方法是,两条轴穿过原点(0,0),就是笛卡儿坐标轴。
具体做法是,使用gca()
函数获取Axes
对象,通过这个对象指定每条边的位置:上、下、左、右。使用set_color()
函数,把颜色设置为none
,删除跟坐标轴不符合的边(右和上),然后用set_position()
函数移动跟x
轴和y
轴相符的边框,使其穿过原点(0,0)。
这时,两条轴在图表中部位置交叉,这个位置就是笛卡儿坐标系的原点。如下所示:
输出结果如下:
用注释和箭头标明曲线上某个数据点的位置,这一功能非常有用。matplotlib库的annotate()
函数特别适用于添加注释。它的参数设置略显繁琐,第一个参数为含有LaTex表达式,要在图形中显示的字符串。xy
属性表示注释在图表中的位置。xytext
属性表示文本注释跟它解释的数据点之间的距离。arrowprops
属性表示箭头的属性。
输出结果如下:
Pandas数据结构绘制线型图
我们见识一下用matplotlib库把pandas库的DataFrame数据结构绘制成图表是多么容易,把DataFrame中的数据做成线型图很简单,只需要把DataFrame作为参数传入plot()
函数,就能得到多序列线型图。
输出结果如下:
极客教程相关文章推荐:
Matplotlib 处理日期
Matplotlib 添加图例
Matplotlib 添加网格
Matplotlib 添加文本