Требование довольно строгое и, возможно, не лучший выбор дизайна.Поскольку позже вы захотите построить несколько вспомогательных сюжетов в позиции одного вложенного сюжета, этот отдельный вспомогательный сюжет создается только с единственной целью - умереть и быть замененным через несколько мгновений.
Итак, вы можете получитьположение осей, по которым вы проходите, и создайте новую сетку в этой позиции.Затем удалите исходные оси и создайте новый набор осей внутри этой вновь созданной сетки.
Ниже приведен пример.Обратите внимание, что в настоящее время требуется, чтобы оси, которые необходимо передать, имели значение 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()
