Python Matplotlib通过plt.subplots创建子绘图

目录
  • 前言
  • 一、只有子图的绘制
  • 二、单个方向堆叠子图
  • 三、行列方向扩展子图
  • 四、共享轴
  • 五、极坐标子图

前言

plt.subplots调用后将会产生一个图表(Figure)和默认网格(Grid),与此同时提供一个合理的控制策略布局子绘图。

一、只有子图的绘制

如果没有提供参数给subplots将会返回:

Figure一个Axes对象

例子:

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('A single plot')

二、单个方向堆叠子图

堆叠子图就需要用到额外的可选参数,分别是子图的行和列数,如果你只传递一个数字,默认列数为1,行堆叠。

比如:

fig, axs = plt.subplots(2)
fig.suptitle('Vertically stacked subplots')
axs[0].plot(x, y)
axs[1].plot(x, -y)

当然如果你的子图比较少,可以考虑用元组接收axes对象:

fig, (ax1, ax2) = plt.subplots(2)
fig.suptitle('Vertically stacked subplots')
ax1.plot(x, y)
ax2.plot(x, -y)

如果想要按照行排列,将参数改成(1,2)即可。

三、行列方向扩展子图

如果行列扩展子图,那么axes返回的则是一个二维Numpy数组。利用axe的flat属性,可以批量对轴进行赋值。

fig, axs = plt.subplots(2, 2)
axs[0, 0].plot(x, y)
axs[0, 0].set_title('Axis [0, 0]')# 等价于axes[0][0]
axs[0, 1].plot(x, y, 'tab:orange')
axs[0, 1].set_title('Axis [0, 1]')
axs[1, 0].plot(x, -y, 'tab:green')
axs[1, 0].set_title('Axis [1, 0]')
axs[1, 1].plot(x, -y, 'tab:red')
axs[1, 1].set_title('Axis [1, 1]')

for ax in axs.flat:
    ax.set(xlabel='x-label', ylabel='y-label')

# Hide x labels and tick labels for top plots and y ticks for right plots.
for ax in axs.flat:
    ax.label_outer()

当然你可以用单个轴对象接收:

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
fig.suptitle('Sharing x per column, y per row')
ax1.plot(x, y)
ax2.plot(x, y**2, 'tab:orange')
ax3.plot(x, -y, 'tab:green')
ax4.plot(x, -y**2, 'tab:red')

for ax in fig.get_axes():
    ax.label_outer()

四、共享轴

默认情况下,每个子图都是独立创建的。

看下面这个例子:

fig, (ax1, ax2) = plt.subplots(2)
fig.suptitle('Axes values are scaled individually by default')
ax1.plot(x, y)
ax2.plot(x + 1, -y)

可以看出两者的横坐标刻度并不对齐,那么应该如何设置共享?答:在subplot创建之时使用sharex=Truesharedy=True分别创建X轴共享或者Y轴共享。

将上边的例子修改为以下:

fig, (ax1, ax2) = plt.subplots(2, sharex=True)
fig.suptitle('Aligning x-axis using sharex')
ax1.plot(x, y)
ax2.plot(x + 1, -y)

结果如下:

OK,看上去确实统一了坐标轴,除此,python帮你移除了多余的坐标刻度,上面中间的刻度被删除了。

如果你觉得中间的留白不太舒服的话,也有办法去除。方法是通过GridSpec对象,但是使用上就比较麻烦了,因为你需要自己创建一个figure并使用add_gridspec返回这个对象,然后再通过subplot进行接下来的操作。

直接看例子吧:

fig = plt.figure()
gs = fig.add_gridspec(3, hspace=0)
axs = gs.subplots(sharex=True, sharey=True)
fig.suptitle('Sharing both axes')
axs[0].plot(x, y ** 2)
axs[1].plot(x, 0.3 * y, 'o')
axs[2].plot(x, y, '+')

# Hide x labels and tick labels for all but bottom plot.
for ax in axs:
    ax.label_outer()

这里还用到了轴的label_outer方法,这是用来隐藏非边界的坐标轴的。“share”在这里的意思是:共享一个坐标轴,也就意味着刻度的位置是对齐的。

请注意,修改sharex和sharey是全局修改的,所以你如果想让每一行和每一列共享一个坐标轴,可以考虑用sharex='col', sharey='row'

fig = plt.figure()
gs = fig.add_gridspec(2, 2, hspace=0, wspace=0)
(ax1, ax2), (ax3, ax4) = gs.subplots(sharex='col', sharey='row')
fig.suptitle('Sharing x per column, y per row')
ax1.plot(x, y)
ax2.plot(x, y**2, 'tab:orange')
ax3.plot(x + 1, -y, 'tab:green')
ax4.plot(x + 2, -y**2, 'tab:red')

for ax in axs.flat:
    ax.label_outer()

如果你需要关联更加复杂的共享轴关系,可以创建出来使用axe的成员sharex、sharey进行设置:

fig, axs = plt.subplots(2, 2)
axs[0, 0].plot(x, y)
axs[0, 0].set_title("main")
axs[1, 0].plot(x, y**2)
axs[1, 0].set_title("shares x with main")
axs[1, 0].sharex(axs[0, 0])
axs[0, 1].plot(x + 1, y + 1)
axs[0, 1].set_title("unrelated")
axs[1, 1].plot(x + 2, y + 2)
axs[1, 1].set_title("also unrelated")
fig.tight_layout()# 让绘图更加紧凑

五、极坐标子图

fig, (ax1, ax2) = plt.subplots(1, 2, subplot_kw=dict(projection='polar'))
ax1.plot(x, y)
ax2.plot(x, y ** 2)
plt.show()

到此这篇关于Python Matplotlib通过plt.subplots创建子绘图的文章就介绍到这了,更多相关Python创建子绘图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python绘制子图技巧之plt.subplot、plt.subplots及坐标轴修改

    目录 前言 plt.subplot plt.subplots 坐标轴修改 总结 前言 偶然发现python(matplotlib)中绘制子图有两种方法,一种是plt.subplot,另一种是plt.subplots,这篇博客说一下这两种方法的区别,用法,以及常用的一些函数. plt.figure的作用是定义一个大的图纸,可以设置图纸的大小.分辨率等,例如 fig = plt.figure(figsize=(16,16),dpi=300) # 初始化一张画布 plt.plot() 是直接在当前活跃

  • Python Matplotlib marker 标记详解

    目录 前言 1.标记(Markers) 2.标记参考(Marker Reference) 3.Format Strings fmt 4.线参考(Line Reference) 5.颜色参考(Color Reference) 6.标记大小(Marker Size) 7.标记颜色(Marker Color) 前言 Matplotlib,风格类似 Matlab 的基于 Python 的图表绘图系统. Matplotlib 是 Python 最著名的绘图库,它提供了一整套和 Matlab 相似的命令 A

  • Python Matplotlib绘制箱线图boxplot()函数详解

    目录 箱线图 boxplot()函数还提供了丰富的自定义选项 箱线图通常用在多组数据比较时 补充:plt.boxplot()函数绘制箱图.常用方法 实战 常用方法 总结 箱线图 箱线图一般用来展现数据的分布,如上下四分位值.中位数等,也可以直观地展示异常点.Matplotlib提供了boxplot()函数绘制箱线图. import matplotlib.pyplot as plt _ = plt.boxplot(range(10)) # 10个数,0-9 plt.show() 箱线图虽然看起来简

  • Python+matplotlib绘制多子图的方法详解

    目录 本文速览 1.matplotlib.pyplot api 方式添加子图 2.面向对象方式添加子图 3.matplotlib.pyplot add_subplot方式添加子图 4.matplotlib.gridspec.GridSpec方式添加子图 5.子图中绘制子图 6.任意位置绘制子图(plt.axes) 本文速览 matplotlib.pyplot api 绘制子图 面向对象方式绘制子图 matplotlib.gridspec.GridSpec绘制子图 任意位置添加子图 关于pyplo

  • Python matplotlib如何简单绘制不同类型的表格

    目录 载入库 一.折线图 二.散点图 三.条形图 四.柱状图 五.饼状图 六.直方图 七.箱线图 last but not list.如何给x.y轴坐标打上标签 END.如何叠加绘制图像 总结 载入库 绘制表格我们需要用到python库中的matplotlib库 import matplotlib.pyplot as plt 一.折线图 # 绘制一条线是,x轴可以省略,默认用y轴数据的索引替代 plt.plot([0, 2, 4, 6, 8]) # 默认Y轴坐标,x轴按12345--算 plt.

  • 如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图

    目录 问题描述 方法 0. plt.colorbar参数介绍 1. plt.colorbar(im, fraction=0.046, pad=0.04, shrink=1.0) 2. make_axes_locatable 3. make_axes_locatables 升级版 4. 手动给colorbar添加一个axe 总结 问题描述 像这样的图,我想把右边的colorbar设置成和主图一样高度 方法 0. plt.colorbar参数介绍 https://matplotlib.org/sta

  • Python Matplotlib通过plt.subplots创建子绘图

    目录 前言 一.只有子图的绘制 二.单个方向堆叠子图 三.行列方向扩展子图 四.共享轴 五.极坐标子图 前言 plt.subplots调用后将会产生一个图表(Figure)和默认网格(Grid),与此同时提供一个合理的控制策略布局子绘图. 一.只有子图的绘制 如果没有提供参数给subplots将会返回: Figure一个Axes对象 例子: fig, ax = plt.subplots() ax.plot(x, y) ax.set_title('A single plot') 二.单个方向堆叠子

  • Python matplotlib通过plt.scatter画空心圆标记出特定的点方法

    在用python画散点图的时候想标记出特定的点,比如在某些点的外围加个空心圆,一样可以通过plt.scatter实现 import matplotlib.pyplot as plt x = [[1, 3], [2, 5]] y = [[4, 7], [6, 3]] for i in range(len(x)): plt.plot(x[i], y[i], color='r') plt.scatter(x[i], y[i], color='b') plt.scatter(x[i], y[i], co

  • Python Matplotlib 实现3D绘图详解

    目录 第一个三维绘图程序 3D散点图 3D等高线图 3D线框图 3D曲面图 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较为实用的 3D 绘图程序包,比如 mpl_toolkits.mplot3d,通过调用该程序包一些接口可以绘制 3D散点图.3D曲面图.3D线框图等 mpl_toolkits 是 Matplotlib 的绘图工具包. 第一个三维绘图程序 下面编写第一个三维绘图程序. 首先创建一个三维绘

  • python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例

    注意主窗口一定要为tk.Tk(),在主窗口上通过button的点击相应子函数创建子窗口,注意此时创建出来的窗口必须是Toplevel,否则出错. 至于用图片在窗口上绘图,则按代码所示即可. # -*- coding: utf-8 -*- """ Created on Wed Oct 26 20:32:52 2016 @author: min """ import Tkinter as tk from PIL import Image, Image

  • Python matplotlib绘图可视化知识点整理(小结)

    无论你工作在什么项目上,IPython都是值得推荐的.利用ipython --pylab,可以进入PyLab模式,已经导入了matplotlib库与相关软件包(例如Numpy和Scipy),额可以直接使用相关库的功能. 本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找. 这样IPython配置为使用你所指定的matplotlib GUI后端(TK/wxPython/PyQt/Mac OS X native/GTK).对于大部分用户而言,默认的后端就已经够用了.Pylab模式

  • python+matplotlib实现动态绘制图片实例代码(交互式绘图)

    本文研究的主要是python+matplotlib实现动态绘制图片(交互式绘图)的相关内容,具体介绍和实现代码如下所示. 最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和matplotlib实现路径的动态显示和交互式绘图(和Matlab功能类似). Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统

  • 完美解决Python matplotlib绘图时汉字显示不正常的问题

    Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下: 1.在python安装目录的Lib目录下创建ch.py文件. 文件中代码为: 保存,以后通过以下代码调用: #-*-coding:utf-8-*- #文件名: ch.py def set_ch(): from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体 mpl.rcParams['axes

  • Python Matplotlib绘图基础知识代码解析

    1.Figure和Subplot import numpy as np import matplotlib.pyplot as plt #创建一个Figure fig = plt.figure() #不能通过空figure绘图,必须使用add_subplot创建一个或多个subplot #图像为2x2,第三个参数为当前选中的第几个 ax1 = fig.add_subplot(2, 2, 1) ax2 = fig.add_subplot(2, 2, 2) ax3 = fig.add_subplot

  • Python matplotlib绘图详解

    目录 图标英文显示设置: 一.figure窗口及坐标轴设置 二.为特殊点加注解(Annotation) 总结 图标英文显示设置: 正常以字符串形式传进去字串,英文显示格式不是很美观,为了让文字更美观点,在书写时以这种格式写: r'$string$' 在这里,如果需要特殊数学字符使用 \ 转义,空格也需要转义 比如:r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$' 一.figure窗口及坐标轴设置 plt.figure(figsize

随机推荐