今天我们要来了解折线图,散点图,条形图,直方图,饼图和器特点。认识Matplotlib的图像结构,并以Matplotlib绘制折线图为例来掌握设置辅助显示层;此外,用Matplotlob设置辅助显示层,内容还增添拓展部份,平时用到的不是很多,作为了解即可。
Matplotlib
,它是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。只需几行代码即可生成绘图,直方图,条形图,散点图等。
# 导入模块
import matplotlib.pyplot as plt
# 在jupyter中执行的时候显示图片
#matplotlib inline
# 传入x和y, 通过plot画图
plt.plot([3, 1, 7], [4, 5, 6])
# 在执行程序的时候展示图形
plt.show()
传入x和y时,括号中的第一个列表是x轴上的值,第二个列表是y上的值。
运行结果:
如何应用呢?
在学习Matplotlib的过程中,大家一定会遇到这样那样的问题,
比如说
,
代码解析:
x轴数值的产生使用range函数,开始数字是1,结束时7,不包含8。
from matplotlib import pyplot as plt
x = range(1,8) # x轴的位置
y = [17, 17, 18, 15, 11, 11, 13]
# 传入x和y, 通过plot画折线图
plt.plot(x, y, color='red',alpha=0.5,linestyle='--',linewidth=3)
plt.show()
'''基础属性设置
color='red' : 折线的颜色
alpha=0.5 : 折线的透明度(0-1)
linestyle='--' : 折线的样式
linewidth=3 : 折线的宽度
'''
'''线的样式
- 实线(solid)
-- 短线(dashed)
-. 短点相间线(dashdot)
:虚点线(dotted)
'''
运行结果:
折点形状选择:
标记maker 描述
‘o’ 圆圈
‘.’ 点
‘D’ 菱形
‘s’ 正方形
‘h’ 六边形1
‘*’ 星号
‘H’ 六边形2
‘d’ 小菱形
‘_’ 水平线
‘v’ 一角朝下的三角形
‘8’ 八边形
‘<’ 一角朝左的三角形
‘p’ 五边形
‘>’ 一角朝右的三角形
‘,’ 像素
‘^’ 一角朝上的三角形
‘+’ 加号
‘| ‘ 竖线
‘None’,’’,’ ‘ 无
‘x’ X
from matplotlib import pyplot as plt
import random
x = range(2,20,2) # x轴的位置
y = [random.randint(15, 30) for i in x]
# 设置图片的大小
'''
figsize:指定figure的宽和高,单位为英寸;
dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
'''
# 设置画布对象
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y) # 传入x和y, 通过plot画图
# 保存(注意:要放在show的上面,plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。)
plt.savefig('./t1.png')
#./表示放在当前python文件的目录
plt.show()
# 图片的格式也可以保存为svg这种矢量图格式,这种矢量图放在网页中放大后不会有锯齿
# plt.savefig('./t1.svg')
x轴
的数值,使用range(),step为2,不包括20;
y轴
的数值是一个列表表达式,由随机数产生,import random之后,randint产生随机整数,范围是15-30。“for i in x”是一个循环,作用是表明y轴数值产生随机数的次数,次数由x轴上数值的个数决定。
运行结果:
在设置Y轴标签时,标签数值的取值范围range(min(y),max(y)+1),这里min()和max()时是函数,分别取y中的最小和最大值,由于range函数不包集合右边的值,故加1
。plt.yticks(range(min(y),max(y)+1),y_ticks_label)中,y_ticks_label表示y轴刻度产生的次数。
matplotlib只显示英文,无法显示中文,需要修改matplotlib的默认字体。通过模块font_manager
使用中文字体可以解决。
以表示两个小时内心脏每分钟跳动变化为例,x轴需要加上标题“时间”,y轴“次数”,图像标题“每分钟跳动次数”,如下图所示:
# 方法add_subplot:给figure新增子图
# 这里引进的科学计算库Numpy,把它看作一个[列表]即可,目的是要使用log方法画log对数函数。
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1, 100) #与range()相同
#新建figure画布对象,三个坐标轴(子图)建立在同一个画布上
fig=plt.figure(figsize=(20,10),dpi=80)
#利用画布对象,在上面放置三个坐标系
#新建子图1
ax1=fig.add_subplot(2,2,1)
ax1.plot(x, x)
#新建子图2
ax2=fig.add_subplot(2,2,2)
ax2.plot(x, x ** 2) #x的二次方,如果是x**3是x的三次方
ax2.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)
#新建子图3
ax3=fig.add_subplot(2,2,3)
ax3.plot(x, np.log(x))
plt.show()
在这里解释一下add_subplot(2,2,1)里的参数的含义。在一个画布上放置三个图,需要排列位置。
首先将一张图,分成两列,再分成两行,总共划分出四个格子,子图1按照从左到右从上到下的顺序放在第一个格子里。
运行结果:
Matplotlib
,自己编数据设计样式,绘制一幅自己的折线图。