查看matplotlib文档,似乎将 an 添加AxesSubplot到 a 的标准方法Figure是使用Figure.add_subplot:
matplotlib
AxesSubplot
Figure
Figure.add_subplot
from matplotlib import pyplot fig = pyplot.figure() ax = fig.add_subplot(1,1,1) ax.hist( some params .... )
我希望能够AxesSubPlot独立于图形创建类似对象,以便可以在不同的图形中使用它们。类似
AxesSubPlot
fig = pyplot.figure() histoA = some_axes_subplot_maker.hist( some params ..... ) histoA = some_axes_subplot_maker.hist( some other params ..... ) # make one figure with both plots fig.add_subaxes(histo1, 211) fig.add_subaxes(histo1, 212) fig2 = pyplot.figure() # make a figure with the first plot only fig2.add_subaxes(histo1, 111)
这可能吗matplotlib?如果可以,我该怎么做?
更新:我还没有设法将轴和图形的创建分离,但按照下面答案中的示例,可以轻松地在新的或旧的图形实例中重复使用以前创建的轴。这可以用一个简单的函数来说明:
def plot_axes(ax, fig=None, geometry=(1,1,1)): if fig is None: fig = plt.figure() if ax.get_geometry() != geometry : ax.change_geometry(*geometry) ax = fig.axes.append(ax) return fig
在 matplotlib 中,Axes 和 Figure 对象是紧密耦合的。通常情况下,Axes 对象是在 Figure 中创建的,并且不能独立于 Figure 存在。然而,有一些方法可以模拟你想要的行为,即在不同的 Figure 中使用相同的 Axes。
Axes
你可以定义绘图函数,这样你可以在不同的 Figure 中应用相同的绘图逻辑。这种方法允许你在多个图形中重复使用相同的绘图代码。
import matplotlib.pyplot as plt def plot_histogram(ax, data, **kwargs): """ 在给定的 Axes 上绘制直方图 """ ax.hist(data, **kwargs) # 生成一些示例数据 import numpy as np data1 = np.random.randn(1000) data2 = np.random.randn(1000) # 创建第一个图形和坐标轴 fig1, ax1 = plt.subplots() plot_histogram(ax1, data1, bins=30, color='blue') # 创建第二个图形和坐标轴 fig2, ax2 = plt.subplots() plot_histogram(ax2, data2, bins=30, color='green') plt.show()
Figure.add_axes
如果你想对 Axes 的位置和大小有更多的控制,可以使用 Figure.add_axes 方法。这个方法允许你指定 Axes 的位置和大小,这样你可以在多个图形中重复使用相同的布局逻辑。
fig1 = plt.figure() ax1 = fig1.add_axes([0.1, 0.6, 0.8, 0.3]) # [left, bottom, width, height] plot_histogram(ax1, data1, bins=30, color='blue') fig2 = plt.figure() ax2 = fig2.add_axes([0.1, 0.1, 0.8, 0.8]) plot_histogram(ax2, data2, bins=30, color='green') plt.show()
GridSpec
GridSpec 提供了一种灵活的方式来安排多个 Axes 对象。你可以使用 GridSpec 定义图形的网格布局,并在该布局中创建多个 Axes 对象。
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec # 创建图形和 GridSpec 对象 fig = plt.figure() gs = gridspec.GridSpec(2, 1) # 2 行 1 列的网格布局 # 在 GridSpec 的位置上创建 Axes ax1 = fig.add_subplot(gs[0]) ax2 = fig.add_subplot(gs[1]) # 绘制数据 plot_histogram(ax1, data1, bins=30, color='blue') plot_histogram(ax2, data2, bins=30, color='green') plt.show()
虽然 matplotlib 不直接支持在不同的 Figure 中重复使用 Axes 对象,但你可以通过复制 Axes 对象的内容来模拟这种行为。这并不完全等同于真正的重用,但可以在一定程度上满足需求。
import matplotlib.pyplot as plt def copy_axes(ax): fig = plt.figure() new_ax = fig.add_subplot(111) for line in ax.get_lines(): new_ax.plot(line.get_data(), label=line.get_label()) return fig, new_ax # 创建原始图形和坐标轴 fig1, ax1 = plt.subplots() plot_histogram(ax1, data1, bins=30, color='blue') # 复制坐标轴到新图形 fig2, ax2 = copy_axes(ax1) plt.show()
这些方法可以帮助你在不同的 Figure 中重复使用绘图逻辑或布局,满足你的需求。