Повторите тот же самый сюжет в matplotlib - PullRequest
0 голосов
/ 15 ноября 2018

У меня довольно сложные трехмерные данные, которые я хочу построить с помощью 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...