1、matplotlib三层结构
程序画图,也和我们手工画图一样,要有画板、画布、画图的工具等。所以我们学matplotlib画图之前,需要知道这个包是怎么划分这些结构的。下面看看matplotlib的三层结构:
(1)容器层:最下面的一层,其实就是画板、画布等等;
(2)图像层:根据数据绘制出来的图像;
(3)辅助层:如坐标轴、坐标轴的名称、网格线、图例、边框线、标题等。
下面看看matplotlib是怎么实现的:
1.1 容器层
作用:
1.2 图像层
1.3 辅助显示层
这三层结构理解了之后,我们接下来通过实际的例子来说明:
2、折线图
2.1 绘制基本折线图
案例:绘制2020年4月1日—2020年4月5日中国新增确诊病例的折线图。
数据:
time = [‘20200401’, ‘20200102’, ‘20200403’, ‘20200404’, ‘20200405’]
china = [93, 78, 73, 55, 75]
代码:
import matplotlib.pyplot as plt
# 1.准备数据
time = ['20200401', '20200102', '20200403', '20200404', '20200405']
china = [93, 78, 73, 55, 75]
# 2.创建画布
plt.figure(figsize=(5, 4), dpi=600) # figsize:调整画布的大小,dpi:分辨率
# 3.绘制折线图
plt.plot(time, china) # 两个参数:第一个相当于x轴,第二个相当于y轴
# 4.展示
plt.show()
结果:
2.2 添加辅助线
实现代码:
import matplotlib.pyplot as plt
# 显示中文
font = {
'family':'SimHei', 'weight':'bold', 'size':'16'}
plt.rc('font', **font) # 步骤一(设置字体的更多属性)
plt.rc('axes', unicode_minus=False) # 步骤二(解决坐标轴负数的负号显示问题)
# 1.准备数据
time = ['20200401', '20200102', '20200403', '20200404', '20200405']
china = [93, 78, 73, 55, 75]
# 2.创建画布
plt.figure(figsize=(5, 4), dpi=100) # figsize:调整画布的大小,dpi:分辨率
# 3.绘制折线图
plt.plot(time, china)
# 添加辅助显示层
# 添加x轴,y轴的刻度
xticks = ['4月1日', '4月2日', '4月3日', '4月4日', '4月5日',] # 这个变量名字可以变
plt.xticks(time, xticks) # 由于原来的time是字符串形式的,所以要传,保证对应
yticks = range(0, 101, 10)
plt.yticks(yticks) # china是数值形式,不用传
# 添加x轴,y轴的名称
plt.xlabel('时间')
plt.ylabel('新增确诊数量')
# 设置标题
plt.title('4月1日-4月5日新增数量')
# 4.展示
plt.show()
结果:
(1)解决matplotlib中文问题:
如果不设置,中文就会显示为下面这样:
那怎么解决呢?接着看:
(1) 下载SimHei字体(或者其他支持中文显示的字体也可以):
https://pan.baidu.com/s/1GPh8vhn7ZsXfxv6zA4RWzQ
(2) 查看配置文件位置:
import matplotlib
print(matplotlib.matplotlib_fname) # 我的为D:\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
(3) 将下载的SimHei.tff文件复制到
mpl-data目录下\font\tff
(4) 进入上述的目录,修改配置文件matplotlibrc,在尾部追加如下内容:
font.family :sans-serif
font.sans-serif :SimHei
axes.unicode_minus :False
(5) 删除matplotlib中的缓存文件(