机器学习(3)- Matplotlib

Matplotlib

一. Matplotlib之HelloWorld

  1. 什么是Matplotlib
    专门绘制2D图表的软件

  2. 为什么要学习Matplotlib
    做数据可视化, Matplotlib是一个比较方便的工具

  3. 实现一个简单的Matplotlib画图

  4. 导入: import matplotlib.pyplot as plt

    1. 准备数据
    2. 创建画布
    3. 绘图
    4. 展示
  5. Matplotlib三层结构

    1. 容器层

      画板 -> 画布 -> 坐标系

    2. 辅助层

      1. 刻度, 坐标轴的标题, 标题, 网格, 图例
    3. 图像层

      1. 折线, 柱状图, 散点图, 饼状图, 直方图 …

二. 折线图(plot)与基础绘图功能

1. 折线图绘制与保存图片

  1. 绘图三步:
    1. 创建画布
    2. 绘图
    3. 展示
  2. 保存图片
  • API: plt.savefig(path)
  • 注意: 必须在show()前调用
  • 原因: show()把画布清空了.

2. 完善原始折线图1(辅助显示层)

  • 2.1 添加自定义x,y刻度

    • 添加x轴刻度

      扫描二维码关注公众号,回复: 8937906 查看本文章
      • api: plt.xticks(x, 刻度文本列表)
    • 添加y轴刻度

      • api: plt.yticks(y, 刻度文本列表)
    • 注意:

      1. 第一个参数必须是一个标量的列表
      2. 刻度文本列表必须和标量的列表一一对应
      import random
      # 准备数据
      
      x = range(60)
      y_gz = [random.randint(25,35)  for i in x]
      
      # 创建画布
      
      plt.figure(figsize=(20, 8), dpi=80)
      
      # 绘图
      
      plt.plot(x, y_gz)
      
      # 添加刻度
      
      # 准备刻度的数据
      
      x_ticks = ['11点{}分'.format(i) for i in x]
      y_ticks = range(40)
      
      # 设置刻度
      
      plt.xticks(x[::5], x_ticks[::5], fontsize=20)
      plt.yticks(y_ticks[::5], fontsize=20)
      
      # 展示
      
      plt.show()
      
  • 2.2 中文显示问题解决[了解]

    1. 下载黑体
    
    2. 拷贝字体文件
    
        # ~/.virtualenvs/ai/local/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf
        # 字体文件
        # 打印matplotlib配置文件的位置
        import matplotlib
        print(matplotlib.matplotlib_fname())
    
    1. 编辑配置文件

        #cd  ~/.virtualenvs/ai/local/lib/python3.5/site-packages/matplotlib/mpl-data 
        #vim matplotlibrc 
      
        # 添加下面内容到配置文件中
        font.family         : sans-serif
        font.sans-serif         : SimHei
        axes.unicode_minus  : False
      
    2. 删除缓存文件

        rm -r ~/.cache/matplotlib/*
      
    3. 重新运行 jupyter notebook

  • 2.3 添加网格显示

    • API: plt.grid(linestyle, alpha, color)
    • 参数:
      • linestyle; 线的样式, - 实线, --虚线
    • alpha: 透明度
      • color: 颜色 r,g,b
  • 2.4 添加描述信息

    • 添加x轴描述: plt.xlabel(‘名称’, fontsize)
    • 添加y轴描述: plt.ylabel(‘名称’, fontsize)
    • 添加标题: plt.title(‘标题’, fontsize)

3. 完善原始折线图2(图像层)

  • 3.1 多次plot

    • 如何绘制多折线图?
      • 调用多次 plt.plot()
    • plt.plot(x,y,linestyle,color,label)
    • linestyle; 线的样式, - 实线, – 虚线
    • color: r,g,b,y,c,m,k(黑色)
    • label: 给线打标签(起名字)
  • 3.2 图例

    • plt.legend(loc=‘best’, fontsize=20)
    • 注意: 线要有label.
    1. 多个坐标系显示-plt.subplots(面向对象的画图方法)
    • API: plt.subplots(nrows=1, ncols=1, figsize=(20, 10), dpi=80)
    • 参数:
      • nrows: 有几行坐标系
      • ncols: 有几列坐标系
      • figsize: 画布大小
      • dpi: 清晰度
    • 返回:
      • 画布, 坐标系的元组(列表)
  • 坐标系功能与plt相同, 有些方法不同

    • set_xticks()
    • set_yticks()
    • set_xticklabels()
    • set_title()
    • set_xlabel()
    • set_ylabel()
# 准备数据
x = range(60)
y_gz = [random.randint(25,35)  for i in x]
y_bj = [random.randint(10,20)  for i in x]

# 获取两个坐标系
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)

# 绘制折线图
axes[0].plot(x, y_gz, linestyle='--', color='r', label='广州')
axes[1].plot(x, y_bj, color='b', label='北京')

# 添加图例
axes[0].legend()
axes[1].legend()

# 设置刻度
xticks = ['11点{}分'.format(i) for i in x]
yticks = range(40)
axes[0].set_xticks(x[::10])
axes[0].set_xticklabels(xticks[::10])
axes[0].set_yticks(yticks[::5])

axes[1].set_xticks(x[::10])
axes[1].set_xticklabels(xticks[::10])
axes[1].set_yticks(yticks[::5])

# 设置坐标轴描述(名称)
axes[0].set_xlabel('时间')
axes[0].set_ylabel('文档')
axes[0].set_title('广州11点到12点的温度变化情况')

axes[1].set_xlabel('时间')
axes[1].set_ylabel('文档')
axes[1].set_title('北京11点到12点的温度变化情况')

plt.show()

三. 折线图的应用场景

  1. 绘制数据随时间变化的情况
  2. 绘制函数图形.
import numpy as np
# 准备数据
x = np.linspace(-10, 10, 1000)
y = np.sin(x)

# 创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 绘图
plt.plot(x, y)

# 展示
plt.show()

四. 常见图像绘制

  1. API与含义:

    • 折线图: 用于描述数据的变化情况
      • API: plt.plot(x, y)
    • 散点图: 1. 查看两个变量的相关性 2. 查看数据的分布情况
      • API: plt.scatter(x, y)
    • 柱状图: 对比,时间序列.
      • API: plt.bar(x, height, width, color)
    • 直方图: 用于统计一组连续数据的分布情况
      • API: plt.hist(x, bins)
    • 饼状图: 统计每一部分的占比情况
      • API: plt.pie(x, labels, autopct, colors)
  2. 案例

    • 散点图绘制

         import matplotlib.pyplot as plt
         # 0.准备数据
         x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,
               163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,
               21.61, 483.21, 245.25, 399.25, 343.35]
         y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,
               140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,
               30.74, 400.02, 205.35, 330.64, 283.45]
      
     # 创建画布
     plt.figure(figsize=(20,8), dpi=80)
     # 绘制散点图
     plt.scatter(x, y)

     # 展示
     plt.show()

- 柱状图

  ```python
     # 准备数据
     movie_names =  ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
     height = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
  
     # 创建画布
     plt.figure(figsize=(20, 8), dpi=80)
  
     # 绘制柱状图
     x = range(len(movie_names))
     plt.bar(x, height, width=0.5, color=['r','g','b','c','m','k','y'])
  
     # 设置x轴刻度
     plt.xticks(x, movie_names)
  
     # 展示
     plt.show()
  • 饼状图

       # 准备数据
       x = [10, 20, 30, 40, 60]
    
       # 创建画布
       plt.figure(figsize=(4, 4), dpi=100)
    
       # 绘制饼状图
       plt.pie(x, labels=list('abcde'), autopct='%.2f%%', colors=['r','g','y','c','m'])
    
       # 展示
       plt.show()
    
发布了112 篇原创文章 · 获赞 289 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/WeiLanooo/article/details/102533435