У меня довольно сложные трехмерные данные, которые я хочу построить с помощью 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)
однако мой вызов plot_heavy_data
довольно дорогой, и мне было интересно, есть ли способ просто "скопировать" подзаговор и построить графикэто с изменением только направления взгляда, но оставляя все остальное таким же.Таким образом, я бы сделал только дорогостоящую операцию один раз, вместо того, чтобы повторять ее 3 раза.
уточнение: Функция plot_heavy_data
ТОЛЬКО выводит на график субплот, что-то вроде этого:
def plot_heavy_data(ax):
ax.scatter(*data) # data is huge
Я бы не хотел вызывать эту функцию несколько раз.
Ниже приведен минимальный рабочий пример, в котором я бы хотел вызвать функцию 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()