matplotlib дубликаты топоров или фигуры?
У меня есть несколько линий, баров и художников в одной фигуре / оси. Я хотел бы добавить различные наборы компонентов на исходную фигуру / оси. Возможно ли дублировать все объекты исходной фигуры / осей в другую фигуру / оси без перерисовки всего кода?
Одним из способов будет удаление всех новых добавленных компонентов перед рисованием другого набора компонентов. Однако, если я хочу поместить несколько осей в одну фигуру, это не сработает. Некоторое обсуждение было сделано здесь. Но он копирует / добавляет все объекты один за другим, что не лучше, чем перерисовывать все, когда объектов много.
@ Грег, большое спасибо за ответ. Если я просто вычеркну данные, это будет просто, просто перенеси данные или даже скопируй некоторые строки. Тем не менее, на этих рисунках содержится много исполнителей, которые также могут быть добавлены пользователем через интерфейс GUI или ботом с помощью сценария "на лету", их типы могут быть неизвестны во время выполнения. И сюжет генерируется на лету. Конечно, я могу попытаться скопировать все данные, записать все типы исполнителей, свойства и заново разместить их. Но это слишком много и связано с модификацией программного обеспечения, которое генерирует эти цифры. Может быть, я могу перебрать все возможные объекты сделать copy
а также add_xxx
, Но я надеюсь, что будет лучший способ.
Спасибо @Джо Кингтону и его посту: "добавить экземпляр оси к другой фигуре".
Я обернул способ дублировать оси и вставить оси в подзаговор:
def test_pickleAxes():
import pickle
import numpy as npy
x = npy.arange(0,4*npy.pi,0.2)
y = npy.sin(x)
fig, ax = plt.subplots()
p = pickle.dumps(ax)
ax2 = pickle.loads(p)
ax.change_geometry(2,1,1)
ax2.change_geometry(2,1,2)
fig._axstack.add(fig._make_key(ax2), ax2)
plt.show()
Тем не менее, в большинстве случаев это кажется не лучше, чем блядь до сих пор. Это почему? Потому что рассол осей на самом деле - рассол всей фигуры. Если снять его, он создаст новую фигуру, и загруженный экземпляр осей будет ассоциироваться с ним. Даже нам удалось добавить оси в старую фигуру. ax2 по-прежнему ассоциируются только с новой фигурой. Таким образом, когда мы пытаемся взаимодействовать со старой фигурой, ax2 не будет взаимодействовать. Вместо этого, если мы масштабируем / панорамируем новую фигуру, ax2 на обеих фигурах изменится. Если мы просто сохраним файл svg или pdf, это будет вполне приемлемое решение.
Тем не менее, попробуйте найти способ отделить ax2 от новой фигуры и соединить ее со старой.