这个要求非常严格,也许不是最好的设计选择。因为您以后想在一个子图的位置绘制多个子图,所以创建这个子图的唯一目的是在几分钟后死亡并被替换。在
因此,您可以获得传入轴的位置,并在该位置创建一个新的gridspec。然后删除原始轴,并在新创建的gridspec中创建一组新轴。在
下面就是一个例子。注意,它当前要求传入的轴是Subplot(与任何轴相反)。
它还将绘图的数量硬编码为2*2。在实际的用例中,您可能会从传入的model中获得该数字。在import matplotlib.pyplot as plt
import numpy as np
from matplotlib import gridspec
class ClassName():
def __init__(self, model, ax=None, **kwargs):
ax = ax or plt.gca()
if not hasattr(ax, "get_gridspec"):
raise ValueError("Axes needs to be a subplot")
parentgs = ax.get_gridspec()
q = ax.get_geometry()[-1]
# Geometry of subplots
m, n = 2, 2
gs = gridspec.GridSpecFromSubplotSpec(m,n, subplot_spec=parentgs[q-1])
fig = ax.figure
ax.remove()
self.axes = np.empty((m,n), dtype=object)
for i in range(m):
for j in range(n):
self.axes[i,j] = fig.add_subplot(gs[i,j], label=f"{i}{j}")
def plot(self, data):
for ax,d in zip(self.axes.flat, data):
ax.plot(d)
_, (ax,ax2) = plt.subplots(ncols=2)
cm = ClassName("mymodel", ax=ax2) # calling my class
cm.plot(np.random.rand(4,10))
plt.show()