Matplotlib学习笔记

目标

  • 使用Matplotlib的基本功能实现图形显示
  • 使用实现多图显示
  • 使用实现不同画图种类

1.1 认识Matplotlib

  • 架构

    • 容器层

      • Canvas--画板:是底层实现,不需要关注

      • Figure--画布:建立在Canvas之上,在使用之前每次都需要进行实例化

      • axes--坐标系:建立在Figure之上,数据的绘图区域

        Axis(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签

    • 辅助显示层

      • 添加坐标描述,标题等内容
    • 图像层

      • 设定要画一个什么样的图像:plot、scatter...
      img

1.2 基础绘图功能(折线图plot)

为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用。

  • matplotlib.pyplot模块

    matplotlib.pytplot包含了一系列类似于matlab的画图函数。 它的函数作用于当前图形(figure)的当前坐标系(axes)

    import matplotlib.pyplot as plt
    
  • 折线图绘制

    展现上海一周的天气,比如从星期一到星期日的天气温度如下

    # 1.创建画布(容器层)
    plt.figure(figsize=(10, 10))
    
    # 2.绘制折线图(图像层)
    plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])
    
    # 3.显示图像
    plt.show()
    
  • 设置画布属性与图片保存

    plt.figure(figsize=(), dpi=)
        figsize:指定图的长宽
        dpi:图像的清晰度
        返回fig对象
    plt.savefig(path)
    

    注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。

  • 添加自定义x,y刻度

    plt.xticks(x, **kwargs)		# x:要显示的刻度值
    
    plt.yticks(y, **kwargs) 	# y:要显示的刻度值
    
  • 中文显示问题

    参考链接:https://www.cnblogs.com/hhh5460/p/4323985.html

  • 网格展示

    plt.grid(True, linestyle='--', alpha=0.5)	# alpha为透明度
    
  • 描述信息

    添加x轴、y轴描述信息及标题

    plt.xlabel("时间")
    plt.ylabel("温度")
    plt.title("中午11点0分到12点之间的温度变化图示")
    

    汇总以上所有方法,完整代码如下:

    import random
    from matplotlib import pyplot as plt
    
    # 1.生成数据
    x = range(60)
    y_beijing = [random.uniform(15, 25) for i in x]
    y_shanghai = [random.uniform(20, 35) for i in x]
    
    # 全局设置中文显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    
    # 2.创建画布
    plt.figure(figsize=(20, 8), dpi=100)
    
    # 3.绘制图形
        # 1.一个图中绘制多个图,多次plot
    plt.plot(x,y_beijing, label='北京')
    plt.plot(x,y_shanghai, label='上海')
    
    # 4.添加x,y轴刻度
    x_ticks_labels = ['12点{}分'.format(i) for i in x]
    y_ticks = range(40)
    
    font = {'family': 'SimHei',
            'weight': 'bold',
            'size': '10'
            }
    
    # 中文显示问题:https://www.cnblogs.com/hhh5460/p/4323985.html
    # 注意:第一个参数必须是数字,如果不是数字,需要进行值替换
        # plt.xticks(x_ticks_labels[::5])
    plt.xticks(x[::5], x_ticks_labels[::5],fontproperties="SimHei")
    plt.yticks(y_ticks[20::5])
    
    # 4.1添加网格
    # 属性:
        # alpha:透明度
        # linestyle:绘制网格的方式
    plt.grid(True, linestyle='--', alpha=1)
    
    # 4.2添加描述
    plt.xlabel('时间', **font)
    plt.ylabel('温度', **font)
    plt.title('一小时内温度变化', fontproperties="SimHei")
    
    # 4.3显示图例
        # 1.需要在显示之前,声明plot里面的具体值
        # 注意:一定要在plt.plot()里面设置一个label,如果不设置,没法显示
    plt.legend(loc=0)
    
    # 4.1图像保存
    # plt.savefig('./images/02-plot')
    
    # 5.图像展示
    plt.show()
    
    
  • 折线图应用

    • 应用于观察数据的变化
    • 可以画出一些数学函数图像

1.3 常见图形绘制

Matplotlib能够绘制折线图、散点图、柱状图、直方图、饼图。我们需要知道不同的统计图的意义,以此来决定选择哪种统计图来呈现我们的数据。

  • 折线图

    api:plt.plot(x, y)

    定义:以折线的上升或下降来表示统计数量的增减变化的统计图。

    特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

    img

  • 散点图

    api:plt.scatter(x, y)

    定义:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

    特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

    img

  • 柱状图

    api:plt.bar(x, width, align='center', **kwargs)

    定义:排列在工作表的列或行中的数据可以绘制到柱状图中。

    特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

    img

  • 直方图

    api:matplotlib.pyplot.hist(x, bins=None)

    定义:由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。

    特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)

    img

  • 饼图

    api:plt.pie(x, labels=,autopct=,colors)

    定义:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

    特点:分类数据的占比情况(占比)

    img

小结

今天我们对Jupyter Notebook的使用和Matplotlib绘图的操作进行了总结,后续我们会总结Numpy和Pandas,在数据处理方面结合Matplotlib进行图形展示,会更直观。也是在工作中,经常用到的。

下期再会,拜了个拜~

posted @ 2021-04-01 15:59  火航  阅读(74)  评论(0编辑  收藏  举报