学习Matplotlib可视化,你必须搞清楚这几个核心概念!

    技术2022-07-12  74

    Matplotlib是一个python 2D绘图库,利用它可以画出许多高质量的图像。

    不过,不知道你有没有这种体验,在matlablib中画出同一个图,通常可以有好多种不同的代码实现。

    所以,如果不把以下这几个概念搞明白,你在网上找代码的时候会很懵,一会儿plt、一会ax,云里雾里一般。

    整体结构

    Figure(画板) 画一幅图,首先要确定画在哪里。所以,最先需要做的就是创建一个画板,对应图中红色的整体框架。

    Axes(Subplot)(画纸、子图) 有了画板,拿来两张纸,开始画,其中一个就叫Axes1,另一个就是Axes2,对应绿色部分。

    Axis(坐标轴) 横轴叫x坐标轴label,纵轴叫y坐标轴ylabel

    生成这个图的代码如下:

    import matplotlib.pyplot as plt import numpy as np %matplotlib inline #第一步创建画布 fig = plt.figure()  # 如果不传入参数默认画板1 #第2步创建画纸,并选择画纸1 ax1=plt.subplot(2,1,1)    #在画纸1上绘图 plt.plot() #选择画纸2 ax2=plt.subplot(2,1,2) #在画纸2上绘图 plt.plot() 显示图像 plt.show()

    Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

    本文是在jupyter笔记本中使用Matplotlib。

    对于中文乱码和数字为负数乱码的情况,可添加以下的代码:

    plt.rcParams['font.sans-serif']=['SimHei'] # 防止中文乱码 plt.rcParams['axes.unicode_minus']=False # 如果需要将数字设为负数,也可能出现乱码的情况
    看看一张图的细节

    拿出一个Axes(subplot),看看细节吧。

    当没有子图的时候,一个Figure就对应一个Axes,一套坐标轴。

    最上方是标题Title

    图例Legend 代表图形里的内容

    网格Grid,True显示网格(图中没开网格)

    坐标轴Axis,横轴叫x坐标轴label,纵轴叫y坐标轴ylabel

    上图的代码如下:

    plt.figure(figsize=(6, 3)) x = np.linspace(0, 10, 1000) y1 = np.sin(x) y2 = np.cos(x) plt.plot(x, y1, color="blue", linewidth=1, label="sin") plt.plot(x, y2, color="red", linewidth=1, label="cos") plt.ylim(-1.1,1.1) plt.xlabel('X') #x轴标签 plt.ylabel('Y') #y轴标签 plt.legend(loc='best') #图列位置,可选best,center等 plt.title("三角函数曲线图") plt.show()
    画图的整个流程

    matplotlib画图可以总结为3个步骤:获取数据——画出基本图形——设置细节。

    按照这个维度(步骤),如果想按照子图分别显示两个曲线(Sinx 和Cosx),可以这样来分析。

    第一部分、获取数据

    横坐标的数据是用numpy模块生成0-10内等间隔的1000个整数,纵坐标为sin函数和cos函数。

    import numpy as np x = np.linspace(0, 10, 1000) y1 = np.sin(x) y2 = np.cos(x)

    第二部分、画出基本图形

    先创建画布,设置画布尺寸,然后在画纸1上绘制sinx,并设置线条宽度为1,颜色为蓝色;在画纸2上绘制cosx,设置线条宽度为1,颜色为红色。

    plt.figure(figsize=(12, 2)) ax1 = plt.subplot(1,2,1) plt.plot(x, y1, color="blue", linewidth=1, label="sin") ax2 = plt.subplot(1,2,2) plt.plot(x, y2, color="red", linewidth=1, label="cos")

    第三部分、完善细节

    添加横纵坐标标签、图例、标题等细节。

    plt.xlabel('X') #x轴标签 plt.ylabel('Y') #y轴标签 plt.legend(loc='best') #图列位置,可选best,center等 plt.title("sin函数曲线图") plt.ylim(-1.1,1.1) plt.show()

    最终效果如图:

    图表分类

    按照数据之间的关系,可以把可视化视图划分为 4 类。

    比较:比较数据间的各类别

    柱状图、条形图、雷达图

    联系:变量之间的关系

    散点图、桑葚图

    构成:每个部分占整体的比例

    饼图、环形图、旭日图、堆积图

    分布:关注变量的分布情况

    散点图、直方图、地图、热力图、面积图

    有了上文中的逻辑结构,虽然每种图形显示的意义以及绘图的参数不尽相同,但框架都是一样的,万变不离其宗。

    剩下的就是调细节啦!

    这里推荐一篇我珍藏的知乎上的Matplotlib的入门文章,关于每种图形的详细参数都有详细介绍,可当做文档来查看。

    https://zhuanlan.zhihu.com/p/70835617     (十分钟|matplotlib上手,开启你的python可视化)

    另外,这张速查表,已经被推荐过很多次了。遇到小的细节,可随时翻看,回顾,值得收藏。

    后台回复“速查表”

    希望这篇文章能够帮你理清Matplotlib中的一些核心概念和整体框架,开始你的python可视化之旅。

    -END-

    往期精彩推荐 --  

    --1、这个在线代码编辑器,可以分享给任何人 --2、这是一份详细的Jupyter入门使用指南 --3、在Python中玩转Json数据

    -- 你  “在看”  我吗?

    Processed: 0.011, SQL: 9