matplotlib的三层结构

容器层

matplotlib基础 - 图1

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()

  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/566095/1641139158030-5cf66f0f-4924-470f-86c7-6634e2edb65e.png#clientId=uf4b55968-af6e-4&from=paste&height=324&id=u25dbe793&margin=%5Bobject%20Object%5D&name=image.png&originHeight=648&originWidth=825&originalType=binary&ratio=1&size=28626&status=done&style=none&taskId=u2048829a-4fce-478d-9c62-b5d39304a5a&width=413)
  2. <a name="zRtNw"></a>
  3. # matplotlib添加辅助层
  4. <a name="FICxt"></a>
  5. ## 常见API
  6. - 添加x轴刻度:`plt.xticks(x, **kwargs)`
  7. - 添加y轴刻度:`plt.yticks(y, **kwargs)`
  8. - 添加x轴名称:`plt.xlabel(xlabel)`
  9. - 添加y轴名称:`plt.ylabel(ylabel)`
  10. - 添加图形标题:`plt.title(title)`
  11. <a name="Fk9W3"></a>
  12. ## 添加网格线
  13. ```python
  14. # 示例
  15. plt.grid(True, linestyle="--",alpha=0.5)
  16. 其中:
  17. 1. 第一个参数True,表示显示网格,False不显示;
  18. 2. linestyle表示网格样式,-表示实线,--表示虚线;
  19. 3. alpha表示网格透明度,区间是0~1,1表示不透明,0表示完全透明。

示例

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. time = ["20200401","20200402","20200403","20200404","20200405"]
  4. china = [98,75,73,55,75]
  5. # 创建画布
  6. plt.figure(figsize=(10,8),dpi=100)
  7. # 绘制折线图
  8. plt.plot(time,china)
  9. # 添加x,y轴刻度
  10. xticks=["4月1日","4月2日","4月3日","4月4日","4月5日"]
  11. plt.xticks(time,xticks)
  12. yticks=range(0,101,10)
  13. plt.yticks(yticks)
  14. # 添加x,y轴名称
  15. plt.xlabel("时间")
  16. plt.ylabel("新增确诊病例数量")
  17. # 设置标题
  18. plt.title("4月1日~4月5日新增确诊病例情况")
  19. # 添加网格线
  20. plt.grid(True,linestyle="--",alpha=0.5)
  21. # 展示
  22. plt.show()

image.png

解决中文显示问题

找到matplotlib安装路径

  1. import matplotlib
  2. print(matplotlib.matplotlib_fname())
  3. # /usr/local/Caskroom/miniconda/base/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc

新增字体

Simhei.ttf字体文件复制到mpl-data目录下的/font/ttf下。

修改matplotlibrc文件

mpl-data目录下,修改matplotlibrc文件,新增以下信息:

  1. ## customer font
  2. font.family: sans-serif
  3. font.sans-serif: SimHei
  4. axes.unicode_minus: False

删除缓存

  1. rm -r ~/.matplotlib/*
  2. rm -r ~/.cache/matplotlib/*

重启jupyter notebook

重启后,重新运行代码即可。

matplotlib绘制多条折线图

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. time = ["20200401","20200402","20200403","20200404","20200405"]
  4. china = [98,75,73,55,75]
  5. usa = [18697,27599,32309,34444,19236]
  6. # 创建画布
  7. plt.figure(figsize=(10,8),dpi=100)
  8. # 绘制折线图
  9. plt.plot(time,china,label="中国")
  10. plt.plot(time,usa,linestyle="--",color="r",label="美国")
  11. # 添加图例
  12. plt.legend()
  13. # 添加x,y轴刻度
  14. xticks=["4月1日","4月2日","4月3日","4月4日","4月5日"]
  15. plt.xticks(time,xticks)
  16. # yticks=range(0,40000,5000)
  17. # plt.yticks(yticks)
  18. # 添加x,y轴名称
  19. plt.xlabel("时间")
  20. plt.ylabel("新增确诊病例数量")
  21. # 设置标题
  22. plt.title("4月1日~4月5日新增确诊病例情况")
  23. # 添加网格线
  24. plt.grid(True,linestyle="--",alpha=0.5)
  25. # 展示
  26. plt.show()

image.png

matplotlib绘制条形图

  1. import matplotlib.pyplot as plt
  2. # 1.准备数据
  3. country=["西班牙","美国","意大利","加拿大","土耳其"]
  4. value=[3861,2614,2275,819,758]
  5. # 2.创建画布
  6. plt.figure(figsize=(10,4),dpi=100)
  7. # 3.绘制条形图
  8. plt.barh(country,value,color=["r","g","b","y","m"])
  9. # 4.添加文本
  10. dx=max(value)/200
  11. for i,value in enumerate(value):
  12. plt.text(value+dx,i,value)
  13. # 5.展示
  14. plt.show()

image.png