一般来说,matplotlib 美工不能多于一个坐标轴,坐标轴不能多于一个图形。(在某些情况下,您可以打破其中的一些规则,但通常不会起作用。)
因此,简短的回答是否定的。
但是,您可能会考虑以下内容。您可以将有问题的图作为子图,然后绑定单击/按键/任何内容以隐藏所有其他子图并使选定的轴暂时填满整个图形。
举个简单的例子:
import numpy as np
import matplotlib.pyplot as plt
def main():
subplots = ZoomingSubplots(2, 2)
colors = ['red', 'green', 'blue', 'cyan']
for ax, color in zip(subplots.axes.flat, colors):
data = (np.random.random(200) - 0.5).cumsum()
ax.plot(data, color=color)
subplots.fig.suptitle('Click on an axes to make it fill the figure.\n'
'Click again to restore it to its original position')
plt.show()
class ZoomingSubplots(object):
def __init__(self, *args, **kwargs):
"""All parameters passed on to 'subplots`."""
self.fig, self.axes = plt.subplots(*args, **kwargs)
self._zoomed = False
self.fig.canvas.mpl_connect('button_press_event', self.on_click)
def zoom(self, selected_ax):
for ax in self.axes.flat:
ax.set_visible(False)
self._original_size = selected_ax.get_position()
selected_ax.set_position([0.125, 0.1, 0.775, 0.8])
selected_ax.set_visible(True)
self._zoomed = True
def unzoom(self, selected_ax):
selected_ax.set_position(self._original_size)
for ax in self.axes.flat:
ax.set_visible(True)
self._zoomed = False
def on_click(self, event):
if event.inaxes is None:
return
if self._zoomed:
self.unzoom(event.inaxes)
else:
self.zoom(event.inaxes)
self.fig.canvas.draw()
if __name__ == '__main__':
main()
初始状态
单击子图后