美文网首页
matplotlib绘图保姆级教程:看过的人都说好!

matplotlib绘图保姆级教程:看过的人都说好!

作者: 生信阿拉丁 | 来源:发表于2021-03-21 15:39 被阅读0次

    作者:llama
    审稿:童蒙
    编辑:amethyst

    如今科研绘图的软件很多,但是如果是需要在脚本中就出图的话,其实python本身自带的matplotlib就非常好用,操作也很简单,跟着小编来看看如何实现吧!

    保证看完就会!

    但是在学习之前,有一点非常重要,这也是我在学习的时候碰到的问题——在matplotlib中绘制出同样的图有很多种方法,而在这所有的方法中间,有两个领头大佬:plt和ax,常常会让人混淆。

    所以在正式的绘图前,我们先用几分钟弄清这两者的区别以及matplotlib是如何利用这两者进行工作的,弄清楚之后你就不再是离开谷歌就没法画图的脚本搬运工啦!

    plt和ax区别

    首先,当我们说到plt时,应当知道这个是大多数人导入matplotlib包时的别名。
    import matplotlib.pyplot as plt

    在matplotlib的官网上对于用matplotlib绘制出来的图有一个生动的介绍:

    matplotlib官网(https://matplotlib.org/1.5.1/faq/usage_faq.html#parts-of-a-figure

    那么其实很容易理解这张图,我们代入自己如果是一个画家,那么其实Figure就是我们画画要用的纸(也就是画布),而Axes则是我们画画的区域,这个区域可大可小,可以是一块区域,也可以是多个区域,在这其中的Axis才是横纵坐标。

    知道这一点后,我们再来看单个Axes中每个元素的名字:

    matplotlib_usage(https://matplotlib.org/tutorials/introductory/usage.html

    那么根据这些,我们来比较plt和ax的区别:

    # 使用plt
    plt.figure()
    plt.plot([1,2,3],[4,5,6])
    plt.show()
    # 使用ax
    fig,ax = plt.subplots()
    ax.plot([1,2,3],[4,5,6])
    plt.show()
    

    结果如下:

    请大家认真看这两张图,回答一下到底哪里不一样?

    回答:其实两张图是一模一样的。不知道你们有没有回答对(手动狗头)。那么两者的区别到底是在哪里呢,其实是在你没法看到的程序实现阶段。使用plt时,我们先生成了一个画布,然后在这个画布上生成了一个隐式区域进行绘图,而在使用ax时,则是生成了画布和画图区域两个对象之后再进行的绘图操作。可以理解为,其实plt有点像薛定谔的图,没有出图之前你并不知道这个图会出现在哪里,而利用ax进行绘制时,图是握在你自己的手上的。

    绘制柱状图

    那么在这个教程中,我们就以绘制柱状图为例子来进行学习。在进行绘制之前,作为金牌推销员还要再推荐一个python包,搭配matplotlib简直不能更好用——那就是pandas。

    #导入所需的包
    import pandas as pd
    import matplotlib.pyplot as plt
    #如果标签为中文需导入中文字体,确认SimHei字体已在库中
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    #先自己给一个数据,如果是excel表格直接导入即可
    df = pd.DataFrame({'x':['January','February','March','April','May','June'],'y':[20,30,15,25,27,21]})
    #绘图
    fig,ax = plt.subplots()
    x=[i+1 for i in range(len(df['x']))]
    ax.bar(x,df['y'],width=0.4,color='skyblue', ec='black')
    #添加柱子上数字
    for a, b in zip(x, df['y']):
        ax.text(a,b+0.5,b,ha='center', va='bottom', fontsize=10)
    #添加x轴标签
    ax.set_xticks(x)
    ax.set_xticklabels(df['x'])
    #添加图标签
    ax.set_title('Sales')
    ax.set_ylabel('Sales')
    plt.show()
    

    其中,添加标签等在任意图中都适用,在柱状图的绘制中,重要的是ax.bar(),使用方法为:

    ax.bar(x,height,width,bottom,align,**kwargs)
    #x为横坐标的值
    #height为各柱子的高度
    #width为柱子的宽度,默认是0.8
    #bottom为柱子底部开始的位置,默认为0
    #align柱子的底部是在中心还是边缘,默认为center
    #**kwargs各种图都适用的参数,例如color表示柱子的颜色,edgecolor简写ec,表示柱子边框颜色等等
    

    那么其他类型的图,则用不同的包即可,例如:散点图或折线图:ax.plot(),饼图:ax.pie()等等,其实方法都是一样啦!

    相关文章

      网友评论

          本文标题:matplotlib绘图保姆级教程:看过的人都说好!

          本文链接:https://www.haomeiwen.com/subject/ihancltx.html