我们使用 Pandas 千辛万苦处理出来一些数据,却发现,这些数据仍然很抽象。如果没有参与运算,或者对数字不是那么敏感的话,可能一时找不到这里面的规律。这时,我们可以考虑把数据绘制成图表,让其仍容易理解,一目了然。
Matplotlib 用来进行数据的可视化处理,也就是把抽象的数据转换成图像展示出来。
最开始,我们还是要导入各种模块:
1 | import matplotlib.pyplot as plt |
plt.plot 绘制线性图
线型图是最基本的曲线图了,适用于把规律很明显的数据展现出来
绘制单条线形图
单个直线的绘制
首先,我们需要两组数据,然后对这两组数据绘图:
1 | x = np.linspace(-np.pi, np.pi, num=10) |
这是一个线性函数,得到的图像当然是一条直线:
我们也可以绘制二次函数的曲线:
1 | x = x |
得到的曲线就是一个抛物线,因为选的点比较少,所以看起来棱角分明:
绘制多条线形图
我们可以通过指定多组 xy,绘制多条线形图:
1 | x = x |
就得到两条曲线:
我们也可以通过连续多次调用 plot 实现绘制多条曲线:
1 | plt.plot(x, y) |
结果是一样的:
设置坐标系的比例
在绘图之前配置 plt.figure(figsize=(a,b)),即可设置坐标系的比例。将坐标系等比例放大或者缩小,刻度是不会改变的:
1 | plt.figure(figsize=(10, 10)) |
我们发现,只是比例变了,也就是图像大小变了,但是坐标范围是不变的:
设置图例
在每个 plot 方法中,通过指定 label 参数设置图例的名称,最后要使用 legend 方法应用图例,显示图像(注意,如果不在最后使用 legend 方法,图例是显示不出来的):
1 | plt.plot(x, y, label='temp') |
显示图例的图像为:
设置轴的标识
我们可以通过设置 xlabel 和 ylabel 属性,指定 x 轴和 y 轴的标识,也可以通过 title 指定标题:
1 | plt.plot(x, y, label='temp') |
指定了轴标识和标题的图像为:
图例保存
生成的图像有时候需要保存起来,在其他地方使用。图像保存只需要三步即可:
fig = plt.figure()
,实例化 figure 对象plt.plot(x, y)
,载入图像信息fig.savefig()
,保存图像
用代码表示就是:
1 | fig = plt.figure() |
图片就保存在了当前目录下。
曲线的样式和风格
曲线颜色
通过 c 参数可以指定曲线的颜色:
1 | plt.plot(x, y, c='red') |
这样曲线就是红色的:
我们还可以指定任意 rgb 的颜色:
1 | plt.plot(x, y, c='#a6c0fe') |
图像就是我们指定的颜色:
曲线透明度
通过 alpha 参数指定曲线的透明度:
1 | plt.plot(x, y, alpha=0.3, c='red') |
可以看到,颜色明显淡很多:
曲线风格
通过 ls 参数指定曲线的风格:
1 | plt.plot(x, y, ls='dotted') |
ls 的取值:[‘solid’ | ‘dashed’, ‘dashdot’, ‘dotted’ | (offset, on-off-dash-seq) | '-'
| '--'
| '-.'
| ':'
| 'None'
| ' '
| ''
]
就拿到了点状的曲线:
点风格
通过 marker 参数可以设置点风格:
1 | plt.plot(x, y, marker='8') |
marker 的值还可以是 *
、^
等符号。
这样就会把点强调出来:
plt.bar 柱状图
plt.bar()
用来绘制柱状图,参数主要有三个:第一个参数是索引,第二个参数是数据值,第三个参数是条形的宽度。
示例:
1 | x = [1, 2, 3, 4, 5] |
生成的柱状图为:
我们可以指定条形的宽度:
1 | plt.bar(x, y, 0.5) |
条形就变细了:
还可以使用 barh 生成横向的条形图:
1 | plt.barh(x, y) |
图形就是这样的:
plt.hist 直方图
直方图是一个特殊的柱状图,又叫做密度图,是一定范围内的数字出现的频次。
plt.hist()
的参数:
- bins
可以是一个 bin 数量的整数值,也可以是表示 bin 的一个序列。默认值为10 - normed
如果值为 True,直方图的值将进行归一化处理,形成概率密度,默认值为 False - color
指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,例如DataFrame对象,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色 - orientation
通过设置 orientation 为 horizontal 创建水平直方图。默认值为 vertical
用代码表示就是:
1 | x = [1, 1, 2, 2, 2, 3, 3, 4, 5, 5, 6, 7, 7, 7, 7, 8, 9, 9, 10] |
生成的直方图为:
plt.pie 饼图
饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小。
pie()
,饼图也只有一个参数 x。
当数据中的数字之和大于 1 时,将绘制出完整的饼图:
1 | arr = [11, 22, 31, 15] |
绘制出的饼图为:
如果数据中数字的和小于 1,则绘制出来的饼图将会是不完整的:
1 | arr = [0.2, 0.3, 0.1, 0.2] |
饼图是有缺口的:
我们可以给每个区块指定标签:
1 | arr = [11, 22, 31, 15] |
饼图就有标签了:
这些标签太靠外了,我们想要把它们放到图片里面,可以指定 labeldistance 参数,设置标签距离圆心的距离:
1 | arr = [11, 22, 31, 15] |
标签就在图片里面了:
我们还可以通过设置 autopct 参数,让饼图中显示每一份占的百分比:
1 | arr = [11, 22, 31, 15] |
饼图中就出现了百分比:
还可以使用 shadow 参数给饼图加阴影,使用 explode 参数把饼图拆分开:
1 | arr = [11, 22, 31, 15] |
饼图就有了阴影,也拆开了:
plt.scatter 散点图
- 自变量的变化会导致因变量的变化
- 因变量随自变量而变化的大致趋势
先来创建两个随机数组:
1 | # array([5, 3, 2, 2, 2, 9, 8, 7, 2, 4, 0, 7, 2, 0, 6, 4, 1, 4, 4, 1]) |
然后,绘制散点图:
随机数的散点图是无规律的。
我们还可以画一下二次函数的散点图:
1 | x = x |
这个图形就很有规律了: