美文网首页Python
建议收藏!Matplotlib常见组件设置整理

建议收藏!Matplotlib常见组件设置整理

作者: Python读财 | 来源:发表于2020-05-01 18:05 被阅读0次

    微信公众号:「Python读财」
    如有问题或建议,请公众号留言

    继上一篇文章为大家介绍了pltax绘图的区别后,这篇文章结合我自己的一些使用经历,为大家整理了Matplotlib中比较常用的一些组件设置。

    个人认为用Matplotlib画出一张图来不难,难的是对于一些细节东西的设置,可能在一个小小的细节处理上就得百度好久,所以可以先点收藏了再看,需要的时候可以及时找出来看看。

    先上一张官方绘制的关于各个组件在一张图中的名词解释,通过这张图可以很直观地感受到什么是legend,什么是tick……,遇到不会设置的也可以照着图搜索对应的文档,下面具体讲讲。

    注: 下方的图片均使用fig,ax = plt.subplots()的方式生成

    设置显示中文字体

    Matplotlib中默认将中文显示为乱码的◻,如下面这种情况

    fig,ax = plt.subplots()
    ax.plot(['北京','上海','深圳'],[1,3,5])
    plt.show()
    

    所以在绘图前可以通过下面的代码解决这个问题

    plt.rcParams['font.sans-serif'] = ['SimHei']
    # SimHei:微软雅黑
    # FangSong:仿宋
    # 这两个是我常用的,其他的可以上网搜一搜
    
    fig,ax = plt.subplots()
    ax.plot(['北京','上海','深圳'],[1,3,5])
    plt.show()
    

    设置标题(title)

    函数:ax.set_title

    利用fontdictloc参数可以分别对字体和标题位置进行设置

    fig,ax = plt.subplots()
    ax.plot(['北京','上海','深圳'],[1,3,5])
    
    #设置16px的字体大小,将标题显示在左侧
    ax.set_title('标题',fontdict={'size':16},loc = 'left')
    plt.show()
    

    边框(spine)的显示问题

    函数:ax.spines[loc].set_visible(False)

    一般的图表中,Matplotlib会默认显示出图形的spine,英文其实不太好翻译,谷歌翻译成脊柱???

    我一般把他叫做边框,就是图形上下左右的四条边线,如图

    我觉得这个边框加上去其实挺丑的,正常使用中有些时候仅仅需要左边left和底部bottomspine,也有时候四条边框都不需要,可以这么设置:

    fig,ax = plt.subplots()
    ax.plot(['北京','上海','深圳'],[1,3,5])
    # 只要左边和底部的边框
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_visible(False)
    plt.show()
    

    图例设置(legend)

    函数:ax.legend()

    图例是对图形所展示的内容的解释,比如在一张图中画了三条线,那么这三条线都代表了什么呢?这时就需要做点注释。

    要显示图例可以有两种方式:

    # 第一种:
    # plot的时候加上label,之后调用ax.legend()
    fig,ax = plt.subplots()
    ax.plot(['北京','上海','深圳'],[1,3,5],label='2010')
    ax.plot(['北京','上海','深圳'],[2,4,6],label='2020')
    ax.legend()
    plt.show()
    
    # 第二种:
    # 使用ax.legend()按顺序设置好图例
    fig,ax = plt.subplots()
    ax.plot(['北京','上海','深圳'],[1,3,5])
    ax.plot(['北京','上海','深圳'],[2,4,6])
    ax.legend(['2010','2020'])
    plt.show()
    

    frameonfontsize参数可以设置是否显示图例的边框以及图例中文字的大小。

    图形与边框之间的留白控制

    函数:ax.margins()

    不知道大家绘图的时候有没有发现,Matplotlib中默认在我们所画的图形和边框之间留有空白,比如

    要去掉这样的空白部分可以使用ax.margins()进行设置

    fig,ax = plt.subplots()
    ax.plot(['北京','上海','深圳'],[1,3,5])
    ax.fill_between(['北京','上海','深圳'],[1,1,1],[1,3,5],color='#7b68ee')
    # 可以设置四个方向都不留白,也可以单独设置留白的方向和宽度
    ax.margins(0)
    plt.show()
    

    设置双坐标轴

    函数:ax.twinx()

    双坐标轴一般用于复合图表,同时表示两种图表的指标量纲不一,经典的使用场景如帕累托图。

    使用中,需要对原有的ax使用.twinx()方法生成ax2,再利用ax2进行绘图

    fig,ax = plt.subplots()
    ax.plot(['北京','上海','深圳'],[1,3,5],color='r')
    
    # 双坐标用法
    ax2 = ax.twinx()
    ax2.bar(['北京','上海','深圳'],[20,40,60],alpha=0.3)
    
    plt.show()
    

    坐标轴相关设置

    在一张二维图中,关于坐标轴各个零件的术语如图所示

    首先有横坐标xaxis和纵坐标yaxis(注意与axes区分),横纵坐标上的标签(也可以说是横纵坐标的名字)为xlabelylabel,横纵坐标上有刻度线tick,刻度上对应的刻度标签则是tick label

    具体设置时所对应的函数为

    • xlabel --> ax.set_xlabel()
    • ylabel --> ax.set_ylabel()
    • tick和tick label --> ax.tick_paramsax.xticks()ax.yticks()
    fig,ax = plt.subplots()
    ax.scatter([3,2,1],[1,3,5],color='r')
    ax.plot([3,2,1],[1,3,5],color='r')
    
    # 分别设置xy轴的标签
    ax.set_xlabel('x',fontsize=16)
    ax.set_ylabel('y',fontsize=16)
    
    fig,ax = plt.subplots()
    ax.scatter([3,2,1],[1,3,5],color='r')
    ax.plot([3,2,1],[1,3,5],color='r')
    
    # fontsize设置刻度标签的大小
    # direction控制刻度是朝内还是朝外显示
    ax.tick_params(labelsize=14,direction='in')
    

    网格线(grid)设置

    函数:ax.grid()

    网格线多用于辅助查看具体的数值大小,横纵坐标都可以设置相应的网格线,视具体情况而论。

    fig,ax = plt.subplots()
    ax.plot([1,2,3],[4,2,6],color='r')
    # b参数设置是否显示网格
    # axis参数设置在哪个轴上显示网格线,可选参数为'x','y','both'
    ax.grid(b=True,axis='y')
    

    常用的图表组件设置就总结到这里,有写错的地方欢迎拍砖!

    关注我的公众号「Python读财」,后台回复「py」即可获取Python学习资源礼包


    相关文章

      网友评论

        本文标题:建议收藏!Matplotlib常见组件设置整理

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