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 matplotlibprint(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 fontfont.family: sans-seriffont.sans-serif: SimHeiaxes.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)/200for i,value in enumerate(value):plt.text(value+dx,i,value)# 5.展示plt.show()

