在matplotlib中重复相同的子图

juq*_*uqa 5 python plot matplotlib

我有非常复杂的3D数据,我想用matplotlib绘制.为了能够更好地理解,我想在不同的子图上绘制相同的数据view_init,每个图中只有不同的数据.目前,我的代码看起来很像:

fig = plt.figure()
views = [(0, 0), (90, 0), (0, 90)]
for i (elev, azim) in enumerate(views):
    ax = fig.add_subplot(1, 3, i+1, projection='3d')
    plot_heavy_data(ax)  # expensive call
    ax.view_init(elev, azim)
Run Code Online (Sandbox Code Playgroud)

然而,我的召唤plot_heavy_data是相当昂贵的,我想知道是否有一种方法只是"复制"一个子情节并通过改变视图方向来绘制它,但保持其他一切相同.这样我只会做一次昂贵的操作,而不是重复3次.

澄清: 该功能plot_heavy_data仅绘制到子图,如下所示:

def plot_heavy_data(ax):
    ax.scatter(*data)  # data is huge
Run Code Online (Sandbox Code Playgroud)

我想避免多次调用此函数.

以下是一个最小的工作样本,我只想调用该plot函数一次.

import matplotlib.pyplot as plt
import numpy as np

def plot(ax, data):
    # ideally only call this function once
    ax.scatter(*data)

data = np.random.random((2, 20))

fig = plt.figure(figsize=(12, 4))

for i in range(3):
    ax = fig.add_subplot(1, 3, i+1)
    plot(ax, data)
    ax.set_xlim([0, i+1])  # do 'some' manipulation on ax

plt.show()
Run Code Online (Sandbox Code Playgroud)