matplotlib的三层结构
容器层
Canvas
位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。
Figure
是Canvas上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色。
可以通过
**plt.figure()**
设置画布的大小和分辨率。Axes
是应用层的第二层,在绘图的过程中充当画布上的绘图区的角色。
Axes坐标系:数据的绘图区域;
Axes坐标轴:坐标系中的一条轴,包含大小限制、刻度和刻度标签。
图像层
图像层指的是Axes内通过plot(折线图)、scatter(散点图)、bar(条形图)、histogram(直方图)、pie(饼图)等函数,根据数据绘制出的图形。
辅助显示层
辅助显示层是Axes内的除了图像外的内容。
外观:
**facecolor**
;- 边框线:
**spines**
; - 坐标轴:
**axis**
; - 坐标轴名称:
**axis label**
; - 坐标轴刻度:
**axis tick**
; - 坐标轴刻度标签:
**tick label**
; - 网格线:
**grid**
; - 图例:
**legend**
; - 标题:
**title**
。matplotlib绘制折线图
```python import matplotlib.pyplot as plt
准备数据
time = [“20200401”,”20200402”,”20200403”,”20200404”,”20200405”] china = [98,75,73,55,75]
创建画布
plt.figure(figsize=(10,8),dpi=100)
绘制折线图
plt.plot(time,china)
展示
plt.show()

<a name="zRtNw"></a>
# matplotlib添加辅助层
<a name="FICxt"></a>
## 常见API
- 添加x轴刻度:`plt.xticks(x, **kwargs)`
- 添加y轴刻度:`plt.yticks(y, **kwargs)`
- 添加x轴名称:`plt.xlabel(xlabel)`
- 添加y轴名称:`plt.ylabel(ylabel)`
- 添加图形标题:`plt.title(title)`
<a name="Fk9W3"></a>
## 添加网格线
```python
# 示例
plt.grid(True, linestyle="--",alpha=0.5)
其中:
1. 第一个参数True,表示显示网格,False不显示;
2. linestyle表示网格样式,-表示实线,--表示虚线;
3. alpha表示网格透明度,区间是0~1,1表示不透明,0表示完全透明。
示例
import matplotlib.pyplot as plt
# 准备数据
time = ["20200401","20200402","20200403","20200404","20200405"]
china = [98,75,73,55,75]
# 创建画布
plt.figure(figsize=(10,8),dpi=100)
# 绘制折线图
plt.plot(time,china)
# 添加x,y轴刻度
xticks=["4月1日","4月2日","4月3日","4月4日","4月5日"]
plt.xticks(time,xticks)
yticks=range(0,101,10)
plt.yticks(yticks)
# 添加x,y轴名称
plt.xlabel("时间")
plt.ylabel("新增确诊病例数量")
# 设置标题
plt.title("4月1日~4月5日新增确诊病例情况")
# 添加网格线
plt.grid(True,linestyle="--",alpha=0.5)
# 展示
plt.show()
解决中文显示问题
找到matplotlib
安装路径
import matplotlib
print(matplotlib.matplotlib_fname())
# /usr/local/Caskroom/miniconda/base/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc
新增字体
把Simhei.ttf
字体文件复制到mpl-data
目录下的/font/ttf
下。
修改matplotlibrc
文件
在mpl-data
目录下,修改matplotlibrc
文件,新增以下信息:
## customer font
font.family: sans-serif
font.sans-serif: SimHei
axes.unicode_minus: False
删除缓存
rm -r ~/.matplotlib/*
或
rm -r ~/.cache/matplotlib/*
重启jupyter notebook
matplotlib绘制多条折线图
import matplotlib.pyplot as plt
# 准备数据
time = ["20200401","20200402","20200403","20200404","20200405"]
china = [98,75,73,55,75]
usa = [18697,27599,32309,34444,19236]
# 创建画布
plt.figure(figsize=(10,8),dpi=100)
# 绘制折线图
plt.plot(time,china,label="中国")
plt.plot(time,usa,linestyle="--",color="r",label="美国")
# 添加图例
plt.legend()
# 添加x,y轴刻度
xticks=["4月1日","4月2日","4月3日","4月4日","4月5日"]
plt.xticks(time,xticks)
# yticks=range(0,40000,5000)
# plt.yticks(yticks)
# 添加x,y轴名称
plt.xlabel("时间")
plt.ylabel("新增确诊病例数量")
# 设置标题
plt.title("4月1日~4月5日新增确诊病例情况")
# 添加网格线
plt.grid(True,linestyle="--",alpha=0.5)
# 展示
plt.show()
matplotlib绘制条形图
import matplotlib.pyplot as plt
# 1.准备数据
country=["西班牙","美国","意大利","加拿大","土耳其"]
value=[3861,2614,2275,819,758]
# 2.创建画布
plt.figure(figsize=(10,4),dpi=100)
# 3.绘制条形图
plt.barh(country,value,color=["r","g","b","y","m"])
# 4.添加文本
dx=max(value)/200
for i,value in enumerate(value):
plt.text(value+dx,i,value)
# 5.展示
plt.show()