zsh2270365028的个人博客分享 http://blog.sciencenet.cn/u/zsh2270365028

博文

[转载]Py-Matplotlib: Plot 如何生成多个子图,以及它们如何共享坐标轴?或者共轴?

已有 4357 次阅读 2022-1-21 11:42 |个人分类:Python|系统分类:科研笔记|文章来源:转载

refer to: https://blog.csdn.net/MyName_Guan/article/details/109956855


Python - Matplotlib

Matplotlib 是一个用于在 Python 中绘制数组的 2D 图形库;
下面代码可以直接在python环境下运行;
文中可能不会解释全部函数,看代码中的注释会有很大的帮助,如有需要可以查阅官方文档;
目录

    参考资料:
        Figure, Axes, Axies的关系
        官方文档:pyplot.subplots,pyplot.subplot

    例子1:如何在一个图里生成多个子图 ?
        使用 plt.subplot() 函数

    例子2:这些子图如何共享坐标轴 ?
        使用 plt.subplots() 函数

    例子3:如何在坐标系的右侧显示也显示y轴 ?
    即:把折线图放到一个图里面,y轴却用不同的区间
        使用 axes.twinx() 函数
        官方文档:Plots with different scales

    例子4:多个子图常见的问题
        第二列x轴坐标不显示
        生成一个所有子图共用的x、y轴坐标

正文
例子1:如何生成多个子图

    plt.figure(num=None, figsize=None, dpi=None, facecolor=None):
    常用参数:
        num:画布 (figure) 的 id.
        figsize:画布的尺寸,默认=(6.4, 4.8).
        dpi: 画布的像素, 默认=100
        facecolor:画布的背景色 默认=“white”.
    plt.subplot(int, int, index),返回一个axes(坐标轴,或者称为子图):
    常用参数:
        int:第一个代表行.
        int:第二个代表列.
        index: 索引, 索引是从1开始从左往右,从上到下递增。

结果:
在这里插入图片描述
例子2:如何生成同轴的多个子图

  和例子1有两个不同,第一,plt.subplots()的使用而不是plt.subplot(). 第二,坐标轴的控制变成了axes.set_xticks().

    plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, figsize=(6.4, 4.8)),它返回一个figure,和坐标轴们。
    常用参数:
        nrows:几行
        ncols:几列
        sharex, sharey:是否共享x/y轴,取值: {‘none’, ‘all’, ‘row’, ‘col’}. True/all,所有子图共享子图;row,每行子图共享x/y轴;col,每列子图共享x/y轴。
        figsize:图的尺寸
         
    axes.set_xticks(),其他相似的函数:
        axes.set_xlim((-3,5)),axes.set_ylim((-3,3))
        axes.set_xlabel(‘x轴’, fontsize=15), axes.set_ylabel(‘y轴’, fontsize=15, color=‘red’)

结果:
在这里插入图片描述
例子3:如何在一个图里生成两条不同y轴的线

    axes2 = axes1.twinx():
    生成一个和axes1共享x轴的坐标轴。

结果:
在这里插入图片描述
例子4:多个子图常见的问题

这个例子将会给多子图的画布补充一些细节。例如,画布整体的x、y轴标签和title的位置。每一列的y轴的标签等。通过下面的代码可以生成一个更多信息的图,如下图:
下面例子的结果

生成数据:

作图:

可能遇到的问题:

    问题1:如何生成奇数个子图?例如画中,画布生成了六个子图,如何只保留5个?
    使用函数 fig.delaxes() 删除想删除的子图。
    问题2:当删除最后一张图后,只显示第一列的x轴坐标,不显示第二列的x轴坐标。
    它是因为共享x轴之后,x轴坐标只显示在最下面的图下。可以通过 ax4.xaxis.set_tick_params() 设置强制显示。
    主要参数:
        axis:控制强制显示x轴还是y轴的内容,可选 {‘x’, ‘y’, ‘both’}。
        which:控制强制显示major ticks 还是minor ticks的内容,可选 {‘major’, ‘minor’, ‘both’}。–> Major/ Minor ticks 的区别
        labelbottom, labeltop, labelleft, labelrightbool: 控制子图的那个地方label强制显示,bool型变量。
        labelrotation:控制label旋转的角度。
        官方文档:axes.xaxis.set_tick_params()
    问题3:如何生成一个所有子图都共用的x、y轴标签
    使用函数 fig.text() 函数控制显示。
        x,y: 文本的位置,它是通过百分比控制x、y的在图中的相对位置
        s:文本的内容
        官方文档:fig.text()


————————————————
版权声明:本文为CSDN博主「MyName_Guan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MyName_Guan/article/details/109956855



https://blog.sciencenet.cn/blog-587102-1322006.html

上一篇:[转载]python Marker reference
下一篇:[转载]matplotlib 设置图形大小时 figsize 与 dpi 的关系
收藏 IP: 119.78.226.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-20 02:35

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部