Matplotlib 是个python 2D绘图库,是python 2D绘图领域使用最广泛的套件。它能使用这很轻松地将数据图形化,并且提供多样化的输出格式
Matplotlib非常强大,只需几行代码就可绘制各种折线图、饼图、柱形图、直方图、 散点图等
Matplotlib不仅尅绘制最基础的图表,还可以绘制一些高及图表,例如:堆叠柱形图,渐变饼形图、等高线柱形图
不仅如此,Matplotlib还可以绘制3D图。例如:三维柱形图、三维曲面图等
Matplotlib的优势在于:
免费
继承了python语法的优点,面向对象、易读、易维护、代码简洁优美
可借助python强大丰富的拓展模块嵌入在图形用户界面应用程序中,也可嵌入在网页中
pyplot是Matplotlib的子库,该子库可快速的绘制2D图表
使用python 的导入模块语句导入Matplotlib库的pyplot子库,代码如下:
import mMatplotlib.pyplot as plt
使用Matplotlib模块的plot函数,代码如下:
#绘制图表,制定x轴和y轴数据 #以季度销售额为例,1-3月份销售额为257,4-6月份销售额为301,7-9月份销售额为428,10-12月份销售额为475 #x轴对应月份 x = ["1-3", "4-6", "7-9", "10-12"] y = [257,301, 428, 475] plt.plot(x, y) plt.show()
在完成图表绘制后,在本机上显示图表,代码如下:
#显示图表 plt.show()
绘制第一张图表,完整程序代码如下:
#导入Matplotlib库的pyplot模块 import matplotlib.pyplot as plt #以季度销售额为例,1-3月份销售额为257,4-6月份销售额为301,7-9月份销售额为428,10-12月份销售额为475 #x轴对应月份 x = ["1-3", "4-6", "7-9", "10-12"] #y轴对应销售额 y = [257, 428, 475] plt.plot(x, y) #显示图表 plt.show()
Matplotlib 基本绘图主要使用plot函数,语法如下:
Matplotlib.pyplot.plot(x,y,format_string,**kwargs)
x:x轴数据,用数组表示。可选参数,默认为range(len(y))
y:y轴数据,用数组表示
format_string:控制曲线格式的字符串,包括颜色,线条样式和标记样式可选参数
*kwargs:可选参数、关键值参数,比如,输入参数为:(1,2,3,4,a=1,b=2,c=3)
*args=(1,2,3,4,k), *kwargs={'a':1,'b':2',c':3}
#导入Matplotlib库的pyplot模块 import matplotlib.pyplot as plt #以季度销售额为例,1-3月份销售额为257,4-6月份销售额为301,7-9月份销售额为428,10-12月份销售额为475 #x轴对应月份 x = ["1-3", "4-6", "7-9", "10-12"] #y轴对应销售额 y = [257, 428, 475] plt.plot(x, y) #显示图表 plt.show()
示例1中的数据是通过一维数组创建的。下面使用一份气温数据的Excel文件实现气温折线图,此图总共有两列数据,一列是对应的气温。具体如下图所示:
日期 | 气温 |
---|---|
1 | 18 |
2 | 14 |
3 | 13 |
4 | 20 |
5 | 18 |
6 | 16 |
7 | 10 |
8 | 9 |
9 | 7 |
10 | 4 |
11 | 18 |
12 | 20 |
13 | 18 |
14 | 14 |
导入气温表的数据,分析14天气温情况,程序代码如下:
import pandas as pd #导入pandas模块 #导入Matplotlib库的pyplot模块 import matplotlib.pyplot as plt #添加黑体字体并解决中文乱码问题 plt.rcParams['font.sans-serif'] = ['SimHei'] #导入Excel文件 df = pd.read_excel(r'./././...xlsx') x = df['日期'] #x轴数据 y = df['气温'] #y轴数据 plt.plot(x,y)#绘制折线图 plt.show()#显示图表
美化气温直线图,使其添加线条、标记样式、坐标样式、标题及图例
颜色设置
线条设置
标记样式
设置画布
参数配置
设置坐标样式
文本样式
图例及标题
color参数用于设置线条颜色
lifestyle参数用于设置线条的样式
marker参数用于设置标记样式
下面为“14天气温折线图”、设置颜色和线条、并在实际气温位置进行标记,关键代码如下:
#红色,实线,实际气温位置使用实心圆标记 plt.plot(x, y, color = 'r',linestyle = '-', marker = '0')
Matplotlib中可以使用figure函数设置画布大小、分辩率、颜色和边框等
由于Matplotlib的图像均位于绘图对象中,在绘图前,先要创建绘图对象。关键代码如下:
#画布大小为6x4(英寸)背景色为蓝绿色 plt.figure(figsize=(6,4),facecolor='c')
设置x轴和y轴标题主要xlabel函数ylabel函数
下面为气温折线图设置坐标轴标题,其中,设置x轴标题为“2022年3月”,y轴标题为"最高气温"。程序代码如下:
#x轴标题 plt.xlabel('2022年3月') #y轴标题 plt.ylabel('最高气温')
坐标轴范围是指x轴和y轴的取值范围。设置坐标轴范围只要使用xlim函数和ylim函数
设置x轴(日期)范围为0~14 y轴(气温)范围为4~20 ,关键代码如下:
plt.xlim(0,14) #x轴范围 plt.ylim(4,20) #y轴范围
在Matplotlib中可以使用grid函数生成网格线。该函数有很多参数,如颜色、网格线的方向(参数,axis='x'隐藏x轴网格线,axis='y'隐藏y轴网格线)、网格线样式和网格线宽度等,下面为图表设置网格线,关键代码如下:
#灰度值为0.5,线条为双划线,线条宽度为1 plt.grid(color='0.5',lifestyle='--',linewidth=1)
使用text函数给图表中指定的数据点添加文本标签
#zip(x,y):打包为元组的列表,元素的个数与最短的列表一致 for a, b in zip(x,y): plt.text(a, b, '%d℃'%b, ha='center',va='bottom', fontsize=12) #添加文本标签
为图表设置标题使用title函数
下面图表设置标题为“北京14天气温折线图”,关键代码如下:
#设置图表标题,字体大小为18 plt.title('北京14天气温折线图',fontsize=18)
为图表设置图例主要使用legend函数
为“北京14天气温折线图”添加 “ 气温” 图例,显示位置为右下方显示,关键代码如下:
#添加图例 plt.legend (('气温',),loc='lower right',fontsize= 10)
annotate函数用于在图表上给数据添加文本注释,而且支持带箭头的画线工具,方便我们在合适的位置添加描述信息
在“北京14天气温折线图“中用箭头指示最低气温,关键代码如下:
#注释内容"最低气温",被标注的坐标(10,4) #注释文本坐标(11.5,2.5),注释的颜色为绿色,字号为14 #箭头的颜色为绿色,箭头两端相对于箭头总长或收缩0.08 plt.annotate('最低气温',xy=(10,4),xytext=(115,2.5),color='g',fontsize=14,arrowprops=dict(facecolor='g',shrink=0.08))
完整代码如下:
import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] df = pd.read_excel(r'D:\xlearn\博客笔记\Temperature.xlsx') plt.figure(figsize=(6, 4), facecolor='c') x = df['日期'] y = df['气温'] plt.plot(x, y, color='r', linestyle='-', marker='2') plt.xlabel('2022年3月') plt.ylabel('最高气温') plt.xlim(0, 14) plt.ylim(4, 20) plt.plot(x, y) plt.grid(color='0.5', linestyle='--', linewidth=1) for a, b in zip(x, y): plt.text(a, b, '%d℃' % b, ha='center', va='bottom', fontsize=12) plt.title('北京14天气温折线图', fontsize=18) plt.legend(('气温',), loc='lower right', fontsize=10) plt.annotate('最低气温', xy=(10, 4), xytext=(115, 2.5), color='g', fontsize=14, arrowprops=dict(facecolor='g', shrink=0.08)) plt.show()