如何在Matplotlib Python中的子图中插入图形(3x3子图)

时间:2019-05-16 21:32:30

标签: python matplotlib insert figure subplot

我想在子图中插入一个3x3的图形。 Herehere出现了类似的问题,但该解决方案似乎无法有效应对(我认为)。

任何人都可以提供一些代码(尽可能简单)来生成此代码:

enter image description here

如果有人可以提供帮助,我将感到非常高兴,在此先感谢您。任何答复或评论将不胜感激。

1 个答案:

答案 0 :(得分:1)

我使用this答案创建了一种解决方法。我添加的部分写在该行的下方,带有注释#。我承认这不是一般性的和完美的,但我认为仍然足以完成工作。

import matplotlib.pyplot as plt
import numpy as np

def add_subplot_axes(ax, rect): # This is the function in the linked answer
    fig = plt.gcf()
    box = ax.get_position()
    width = box.width
    height = box.height
    inax_position  = ax.transAxes.transform(rect[0:2])
    transFigure = fig.transFigure.inverted()
    infig_position = transFigure.transform(inax_position)    
    x = infig_position[0]
    y = infig_position[1]
    width *= rect[2]
    height *= rect[3]  
    subax = fig.add_axes([x,y,width,height])
    x_labelsize = subax.get_xticklabels()[0].get_size()
    y_labelsize = subax.get_yticklabels()[0].get_size()
    x_labelsize *= rect[2]**0.5
    y_labelsize *= rect[3]**0.5
    subax.xaxis.set_tick_params(labelsize=x_labelsize)
    subax.yaxis.set_tick_params(labelsize=y_labelsize)
    return subax

# Modified part below

fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111)
x_start, y_start = 0.4, 0.4
for i in range(3):
    for j in range(3):
        rect = [x_start+0.2*i, y_start+0.2*j, 0.15, 0.15]
        ax_ = add_subplot_axes(ax,rect)
        ax_.tick_params(labelsize=6)
plt.show()

enter image description here