Matplotlib是一个主要用于绘制二维图形的Python库。数据可视化是数据分析的重要环节,借助图形能够帮助更加直观地表达出数据背后的”东西”。Matplolib最初主要模仿Matlab的画图命令,但是它是独立于Matlab的,可以自由、免费使用的绘图包。Matplotlib依赖于之前介绍的Numpy库来提供出色的绘图能力。
Matplotlib的官网地址
http://matplotlib.org/
MatplotlibAPI的详细介绍请参考官网地址:
http://matplotlib.org/api/index.html
Windows,Linux,Mac 三种操作系统都可以安装Matplotlib库。以Windows为例,进入CMD窗口中,使用pip命令安装Matplotlib,系统会自动进行安装。
pip install matplotlib
如果安装失败,可以使用国内的镜像来安装Matplotlib库,如下所示。
pip install matplotlib -ihttps://pypi.tuna.tsinghua.edu.cn/simple/
正常情况下,系统还会下载其它的关联安装包并完成安装,最后系统会提示已经安装成功Matplotlib了,如图所示。
我们使用Matplotligb画一个简单直线图。本案例的文件名为PythonFullStack/Chapter07/ pl_linechart.py
,内容如下:
#导入 pyplot模块,并起一个别名 plt
import matplotlib.pyplot as plt
# 设置X轴的坐标为 [1,2,3],设置Y轴的坐标为 [3,2,1]
plt.plot( [1,2,3],[3,2,1] )
#画图
plt.show()
运行脚本如果可以显示下图形,说明Matplotlib的环境安装成功了。
散点图
绘制身高-体重的散点图
import matplotlib.pyplot as plt
height=[161,170,182,175,173,165]
weight=[50,58,80,70,69,55]
#画图
plt.scatter(height,weight , alpha=0.7)
#设置X轴标签
plt.xlabel( 'height')
#设置Y轴标签
plt.ylabel( 'weight ')
#添加图的标题
plt.title('scatter demo')
# 图形显示
plt.show()
运行脚本输出以下图形。
散点图主要演示2个变量的相关性:正相关,负相关,不相关。我们先看下无相关性的散点图。
例子2:无相关性的散点图。
import numpy as np
import matplotlib.pyplot as plt
#设置随机数种子
np.random.seed(10)
#使用Numpy的随机函数,产生X轴和Y轴的数据,具有相同长度的数据
N= 100
x = np.random.randn(N)
y1=np.random.randn(N)
#画图
plt.scatter(x,y1 )
# 图形显示
plt.show()
运行脚本输出以下图形
折线图
折线图,也叫条形图,是用直线将各数据连接起来组成的图形。常用来观察数据随时间变化的趋势。例如股票价格,温度变化等等,如图7-27所示。
上图的折线图是某公司近五年的汽车销售数据,折线图的横坐标是时间,纵坐标是销售量,表示随着时间的推移,销售量的变化趋势。
示例1: 显示 y = 2 x +1 的图形。
Matplotlib中最基础的模块式pyplot,下面从最简单的线图开始讲解,比如有一组数据,还有一个拟合模型,通过编写代码来实现数据与模型结果的可视化。
假设一个线性函数具有形式y = ax + b,自变量x,因变量是y,Y轴截距为b,斜率为a。
下面用简单的数据来描述线程方程y = 2x +1,代码如下。
import matplotlib.pyplot as plt
import numpy as np
# 生成等区间的Numpy数组ndarray,从-1到1分成50份。
x = np.linspace( -1 , 1, 50 )
#线程方程为y = 2x + 1
y = 2 * x + 1
# 设置X轴标签
plt.xlabel('X')
# 设置Y轴标签
plt.ylabel('Y ')
# 画图
plt.plot(x,y)
# 图形显示
plt.show()
运行脚本会输出以下图形。
在上图中,我们使用线程方程y = 2x +1画出的是直线图,如果想画出曲线图,只需要更改线程方程为y= x **2 ,完整代码如下。
import matplotlib.pyplot as plt
import numpy as np
# 设置X轴标签
plt.xlabel('X')
# 设置Y轴标签
plt.ylabel('Y ')
# 取5个点可以看到折线的效果
#x = np.linspace( -1 , 1, 5 )
x = np.linspace( -1 , 1, 50 )
# 线程方程为y = x ** 2
y = x**2
# 画图
plt.plot (x,y)
# 图形显示
plt.show()
运行脚本输出以下图形。
柱状图
柱状图,也叫条形图,以长方形的长度为变量的统计视图。用来比较多个类别的数据大小。通常用来比较两个或以上的变量。如果只有一个变量,通常用于用于较小的数据集分析。例如:不同季度的销量,不同国家的人口等。
例子1:垂直柱状图。
本案例文件名为PythonFullStack/Chapter07/mpl_bar01
,显示垂直的柱状图,其完整代码如下。
import numpy as np
import matplotlib.pyplot as plt
# 柱的个数,生成一个数组,从0到4
index = np.arange(5)
#柱的高度
y=[20,10,30,25,15]
# 画图,生成5个高度为y,柱的宽度为0.5,颜色是红色的柱体
p1 = plt.bar(left=index, height=y , width=0.5 , color='r' )
# 添加图的标题
plt.title("bar demo")
plt.show()
运行脚本会输出以下图形。
图733垂直柱状图
例子2:水平柱状图。
本案例文件名为PythonFullStack/Chapter07/mpl_bar02
,显示水平的柱状图,其完整代码如下。
import numpy as np
import matplotlib.pyplot as plt
N = 5
# 柱的高度
y=[20,10,30,25,15]
# 柱的个数
index = np.arange(N)
# 画图,生成5个高度为y,方向是水平的,柱的宽度为0.8,颜色是蓝色的柱体
p2 = plt.bar(left=0,bottom=index, width=y,height=0.8,orientation ='horizontal' )
# 添加图的标题
plt.title("bar demo")
plt.show()
运行脚本会输出以下图形。
这个案例的核心代码如下,首先使用Numpy生成一个矩阵index,然后需要设置Matplotlib的bar()函数的bottom属性为index,表示柱状图的底部变成了index,水平垂直柱状图的横坐标变成了纵坐标,然后设置 plt.bar()函数的 left属性0,还要设置orientation属性为’horizontal’。orientation表示条形图的方向,设定的值horizontal’表示水平显示。看起来比较绕,但正是这种灵活性,才可以定制出复杂图形。
plt.bar(left=0,bottom=index, width=y,height=0.8,orientation ='horizontal' )