1. matplotlib

主要用于开发2d图表 3d也可以绘画

绘图流程:

  1. 创建画布
  2. 绘制图像
  3. 显示图像

2. 三层结构

  1. 容器层

    • canvas
    • figure
    • axes
  2. 辅助显示层

    • 添加x轴 y轴描述 标题等等
  3. 图像层

    • 绘制什么图像的声明

3. 绘制

  1. plt.figure(figsize=(), dpi=) figsize:指定图的长宽 dpi:图像的清晰度 返回fig对象 创建画布
  2. plt.plot(x, y) 绘制图像
  3. plt.show() 显示图像
  1. import matplotlib.pyplot as plt
  2. #创建画布 figesize为画布尺寸 dpi是像素点
  3. plt.figure(figsize=(20, 8), dpi=100)
  4. #图像绘制
  5. x = [1, 2, 3]
  6. y = [4, 5, 6]
  7. plt.plot(x, y)
  8. #图像展示
  9. plt.show()

4. 保存为图片

  1. #创建画布 figesize为画布尺寸 dpi是像素点
  2. plt.figure(figsize=(20, 8), dpi=100)
  3. #图像绘制
  4. x = [1, 2, 3]
  5. y = [4, 5, 6]
  6. plt.plot(x, y)
  7. #保存图片
  8. plt.savefig("test-mat.png")
  9. #图像展示 show会释放资源 当show调用后plt对象对应的资源也释放了 无法保存为图片
  10. plt.show()

5. 折线图绘画

  1. import random
  2. x = range(60)
  3. y = [random.uniform(10, 15) for i in x]
  4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
  5. plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
  6. # 创建画布
  7. plt.figure(figsize=(15, 8), dpi=300)
  8. # 绘制
  9. plt.plot(x, y)
  10. # 添加 x,y轴刻度
  11. y_ticks = range(40) # 需要提供一个列表
  12. plt.yticks(y_ticks[::5]) # 通过yticks方法赋予属性
  13. x_ticks_label = ["11点{}分".format(i) for i in x]
  14. plt.xticks(x[::5], x_ticks_label[::5]) #第一个参数必须为数字不能为字符串数组
  15. #添加网格
  16. plt.grid(True, linestyle="-",alpha=1) #linestyle为线样式 -为折线 --为虚线 alpha为线的透明度
  17. #添加描述
  18. plt.xlabel("时间")
  19. plt.ylabel("温度")
  20. plt.title("一小时温度变化图")
  21. plt.show()

02. matplotlib - 图1

6. 中文显示问题解决

  1. plt.rcParams['font.sans-serif'] = ['SimHei']
  2. plt.rcParams['axes.unicode_minus'] = False

7. 多次plot和图例

  1. x = range(60)
  2. y_beijing = [random.uniform(10, 15) for i in x]
  3. y_shanghai = [random.uniform(10, 25) for i in x]
  4. plt.rcParams['font.sans-serif'] = ['SimHei']
  5. plt.rcParams['axes.unicode_minus'] = False
  6. plt.figure(figsize=(15, 8), dpi=300)
  7. plt.plot(x, y_beijing, label="北京")
  8. plt.plot(x, y_shanghai, label="上海",color='r' , linestyle='-') # 第二次绘制 如果想显示图例必须赋予laber图例名 color 为线条颜色 linestyle为线条样式
  9. #具体值参照以下图
  10. y_ticks = range(40)
  11. plt.yticks(y_ticks[::5])
  12. x_ticks_label = ["11点{}分".format(i) for i in x]
  13. plt.xticks(x[::5], x_ticks_label[::5])
  14. plt.grid(True, linestyle="-", alpha=1)
  15. plt.xlabel("时间")
  16. plt.ylabel("温度")
  17. plt.title("一小时温度变化图")
  18. # 显示图例
  19. plt.legend(loc=3) #loc为图例位置 值参照以下图
  20. plt.show()

02. matplotlib - 图2

7.1. 图例显示位置

  1. # 绘制折线图
  2. plt.plot(x, y_shanghai, label="上海")
  3. # 使用多次plot可以画多个折线
  4. plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
  5. # 显示图例
  6. plt.legend(loc="best")

02. matplotlib - 图3

8. 多个坐标系显示

  1. x = range(60)
  2. y_beijing = [random.uniform(10, 15) for i in x]
  3. y_shanghai = [random.uniform(10, 25) for i in x]
  4. plt.rcParams['font.sans-serif'] = ['SimHei']
  5. plt.rcParams['axes.unicode_minus'] = False
  6. # 使用subplot绘制多个坐标系
  7. # plt.figure(figsize=(15, 8), dpi=300)
  8. fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=300) #nrows 几行 ncols几列 并且大部分需要转换为set_xxxx方法
  9. # plt.plot(x, y_beijing, label="北京")
  10. # plt.plot(x, y_shanghai, label="上海",color='r' , linestyle='-')
  11. axes[0].plot(x, y_beijing, label="北京")
  12. axes[1].plot(x, y_shanghai, label="上海", color='r', linestyle='-')
  13. y_ticks = range(40)
  14. # plt.yticks(y_ticks[::5])
  15. axes[0].set_yticks(y_ticks[::5])
  16. axes[1].set_yticks(y_ticks[::5])
  17. x_ticks_label = ["11点{}分".format(i) for i in x]
  18. # plt.xticks(x[::5], x_ticks_label[::5])
  19. axes[0].set_xticks(x[::5])
  20. axes[0].set_xticklabels(x_ticks_label[::5])
  21. axes[1].set_xticks(x[::5])
  22. axes[1].set_xticklabels(x_ticks_label[::5])
  23. plt.grid(True, linestyle="-", alpha=1)
  24. # plt.xlabel("时间")
  25. # plt.ylabel("温度")
  26. # plt.title("一小时温度变化图")
  27. axes[0].set_xlabel("时间")
  28. axes[0].set_ylabel("温度")
  29. axes[0].set_title("北京一小时温度变化图")
  30. axes[1].set_xlabel("时间")
  31. axes[1].set_ylabel("温度")
  32. axes[1].set_title("上海一小时温度变化图")
  33. # plt.legend(loc=3)
  34. axes[0].legend(loc=3)
  35. axes[1].legend(loc=3)
  36. plt.show()

02. matplotlib - 图4

9. 数学折线图 figure

  1. import numpy as np
  2. # 从-10 到 10 的1000个数据
  3. x = np.linspace(-10,10,1000)
  4. y = np.sin(x)
  5. plt.figure(figsize=(20,8),dpi=100)
  6. plt.plot(x,y)
  7. plt.grid()
  8. plt.show

02. matplotlib - 图5

10. 散点图 scatter

  1. x = [10.0, 8.07, 13.0, 9.05, 11.0, 14.0, 13.4, 10.0, 14.0, 12.5, 9.15,
  2. 11.5, 3.03, 12.2, 2.02, 1.05, 4.05, 6.03, 12.0, 12.0, 7.08, 5.02]
  3. y = [8.04, 6.95, 7.58, 8.81, 8.33, 7.66, 6.81, 6.33, 8.96, 6.82, 7.20,
  4. 7.20, 4.23, 7.83, 4.47, 3.33, 4.96, 7.24, 6.26, 8.84, 5.82, 5.68]
  5. plt.figure(figsize=(20, 8), dpi=100)
  6. #散点图
  7. plt.scatter(x, y)
  8. plt.grid()
  9. plt.show

02. matplotlib - 图6

11. 柱状图 bar

  1. x =['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  2. y =[120, 200, 150, 80, 70, 110, 130]
  3. plt.figure(figsize=(20, 8), dpi=100)
  4. #柱状图
  5. plt.bar(x, y,width=0.4) #width为柱状图宽度
  6. plt.grid()
  7. plt.show

02. matplotlib - 图7

12. 饼图 pie

  1. x =[2,5,12,70,2,9]
  2. labels = ['娱乐','育儿','饮食','房贷','交通','其它']
  3. plt.figure(figsize=(20, 8), dpi=100)
  4. #饼图
  5. plt.pie(x,labels=labels) #x为数据 labels为lengt的名称
  6. plt.grid()
  7. plt.show

02. matplotlib - 图8

13. 直方图 hist

  1. plt.rcParams['font.family']='SimHei'
  2. plt.rcParams['font.size']=20
  3. # 直方图
  4. mu = 100
  5. sigma = 20
  6. x = np.random.normal(100,20,100) # 均值和标准差
  7. plt.hist(x,bins=20,color='red',histtype='stepfilled',alpha=0.75)
  8. plt.title('直方图数据分析与展示')
  9. plt.show()

02. matplotlib - 图9