前言
matplotlib是Python中众多数据可视化库的鼻祖,其设计风格与20世纪80年代设计的商业化程序语言MATLAB十分接近,具有很多强大且复杂的可视化功能。matplotlib包含多种类型的API(Application Program Interface,应用程序接口),可以采用多种方式绘制图表并对图表进行定制。
matplotlib实际上是一个面向对象的绘图库,它所绘制的图表元素均对应一个对象。matplotlib库仅需开发人员编写几行代码即可绘制一个图表,包括折线图、柱形图或堆积柱形图、条形图或堆积条形图、堆积面积图、直方图、饼图或圆环图、散点图或气泡图、箱形图、雷达图、误差棒图。
一.使用plot()绘制折线图
使用pyplot的plot()函数可以快速绘制折线图。plot()函数的语法格式如下所示:
plot(x, y, fmt, scalex=True, scaley=True, data=None, label=None,
*args, **kwargs)
(1)多次调用plot()函数来绘制具有多个线条的折线图,示例代码如下:
plt.plot(x1,y1)
plt.plot(x2,y2)
(2)调用plot()函数时传入一个二维数组来绘制具有多个线条的折线图。例如,将二维数组arr的第一行数据作为x轴的数据、其他行数据全部作为y轴的数据,代码如下:
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,1211)
plt.plot(arr[0], arr[1:])
(3)调用plot时传组数据来绘制具有多个线条的折线图,示例代码如下:
plt.plot(x1,y1,x2,y2)
实例1:未来15天最高气温和最低气温
日期 | 最高气温 | 最低气温 |
---|---|---|
9月4日 | 32 | 19 |
9月5日 | 33 | 19 |
9月6日 | 34 | 20 |
9月7日 | 34 | 22 |
9月8日 | 33 | 22 |
9月9日 | 31 | 21 |
9月10日 | 30 | 22 |
9月11日 | 29 | 16 |
9月12日 | 30 | 18 |
9月13日 | 29 | 18 |
9月14日 | 26 | 17 |
9月15日 | 23 | 14 |
9月16日 | 21 | 15 |
9月17日 | 25 | 16 |
9月18日 | 31 | 16 |
使用plot()函数绘制反映最高气温和最低气温趋势的折线图及平均气温,具体代码如下:
import matplotlib.pyplot as plt
import numpy as np
x = np. arange(4,19)
y_max = np. array([32, 33, 34, 34, 33, 31, 30, 29, 30, 29, 26, 23, 21, 25, 31])
y_min = np. array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])
y_med = np.array(y_max + y_min) /2.0
plt.plot(x,y_max)
plt.plot(x,y_min)
plt.plot(x,y_med)
plt.show()
二.使用bar()绘制柱形图
使用pyplot的bar()函数可以快速绘制柱形图或堆积柱形图。bar()函数的语法格式如下所示:
bar(x, height, width=0.8, bottom=None, align='center',
data=None, tick_label=None, xerr=None, yerr=None,
error_kw=None,**kwargs)
实例2:2013—2019财年某电商平台的GMV
财年 | 淘宝GMV | 拼多多GMV |
---|---|---|
FY2013 | 10770 | 9770 |
FY2014 | 16780 | 14780 |
FY2015 | 24440 | 24400 |
FY2016 | 30920 | 28920 |
FY2017 | 37670 | 38670 |
FY2018 | 48200 | 49200 |
FY2019 | 57270 | 60270 |
使用bar()函数绘制各年份对应的GMV的柱形图,具体代码如下:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1,8)
y1 = np.array([10770, 16780, 24440, 30920, 37670, 48200, 57270])
y2 = np.array([9770, 14780, 23440, 28920, 38670, 49200, 60270])
bar_width = 0.3
plt.bar(x, y1, tick_label=["FY2013", "FY2014",
"FY2015", "FY2016",
"FY2017", "FY2018", "FY2019"],color="orange",width=bar_width)
plt.bar(x+bar_width, y2, color="red",width=bar_width)
plt.show()
三.绘制条形图
使用pyplot的barh()函数可以快速绘制条形图,barh()函数的语法格式如下所示:
barh(y, width, height=0.8, left=None, align='center', *,
**kwargs)
实例3:各商品种类的网购替代率
商品种类 | 替代率 |
---|---|
家政、家教、保姆等生活服务 | 95.9% |
飞机票、火车票 | 95.1% |
家具 | 93.5% |
手机、手机配件 | 92.4% |
计算机及其配套产品 | 89.3% |
汽车用品 | 89.2% |
通信充值、游戏充值 | 86.5% |
个人护理用品 | 86.3% |
书报杂志及音像制品 | 86.0% |
餐饮、旅游、住宿 | 85.6% |
家用电器 | 85.4% |
食品、饮料、烟酒、保健品 | 83.5% |
家庭日杂用品 | 82.6% |
保险、演出事务 | 81.6% |
服装、鞋帽、家用纺织品 | 79.8% |
数码产品 | 76.5% |
其他商品和服务 | 76.3% |
工艺品、收藏品 | 67.0% |
各商品种类的网购替代率如上图所示,请给条形图添加3%的误差棒。示例代码如下:
import matplotlib.pyplot as plt
import numpy as np
# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.array([0.959, 0.951, 0.935, 0.924, 0.893,
0.892, 0.865, 0.863, 0.860, 0.856,
0.854, 0.835, 0.826, 0.816, 0.798,
0.765, 0.763, 0.67])
y = np.arange(1,19)
height=0.3
error = 0.03
labels = ["家政、家教、保姆等生活服务","飞机票、火车票","家具","手机、手机配件",
"计算机及其配套产品","汽车用品","通信充值、游戏充值","个人护理用品",
"书报杂志及音像制品","餐饮、旅游、住宿","家用电器",
"食品、饮料、烟酒、保健品","家庭日志用品","保险、演出事务",
"服装、鞋帽、家用纺织品","数码产品","其他商品和服务","工艺品、收藏品"]
#绘制条形图
plt.barh(y, x, tick_label=labels, align="center", xerr=error)
plt.show()