Matplotlib:如何将等高线图复制到另一个图形?

时间:2019-08-05 01:03:45

标签: python-3.x matplotlib collections copy contour

我有一个具有许多不同图的图形(轮廓图和许多其他东西)。我想将等高线图提取到另一个图形中以查看更多细节。但我失败了。

看看这段代码:

import numpy as np
from matplotlib import gridspec as gs, pyplot as plt

# Figure 1 with many different plots.
fig1 = plt.figure()
gridSpec = gs.GridSpec(2, 3)
for i in range(6):
    fig1.add_subplot(gridSpec[i])

# Create contour plot
x = np.arange(-3.0, 3.0, 0.02)
y = np.arange(-2.0, 2.0, 0.01)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) ** 4

# Plot it to a particular axes.
ax1 = fig1.axes[2]
contour = ax1.contour(X, Y, Z)

# Try to copy the contour plot to another figure (with only 1 subplot).
fig2, ax2 = plt.subplots()
# How to copy the content of ax1 to ax2?

plt.show()

这将给我以下内容:

ContourPlot

我想创建一个只有1个子图的第二个图形,其内容应该与第一个图形的右上角具有6个子图的内容相同。

我尝试过的第一件事是

ax2.add_collection(contour.collections[1])

但我收到了错误消息

RuntimeError: Can not put single artist in more than one figure

这是因为内容已经绘制到图1上,所以也无法将其绘制到图2上。所以我试图复制等高线图:

from copy import deepcopy
ax2.add_collection(deepcopy(contour.collections[1]))

但这会给我一个新错误,即无法复印...

NotImplementedError: TransformNode instances can not be copied. Consider using frozen() instead.

那么..我该怎么办?对这个问题有什么想法吗? :) 非常感谢!

(Python 3.7.4,Matplotlib 3.1.1)

0 个答案:

没有答案