Решение состоит в том, чтобы установить фигуру/ось в main.py, а затем передать рукоятку оси каждому модулю. В качестве минимального примера
import matplotlib.pyplot as plt
import numpy as np
#from mod import plotsomefunction
#from diffrentmod import plotsomeotherfunction
def plotsomefunction(ax, x):
return ax.plot(x, np.sin(x))
def plotsomeotherfunction(ax, x):
return ax.plot(x,np.cos(x))
fig, ax = plt.subplots(1,1)
x = np.linspace(0,np.pi,1000)
l1 = plotsomefunction(ax, x)
l2 = plotsomeotherfunction(ax, x)
plt.show()
где функции представляют собой модули.
В качестве альтернативы вы можете просто создать фигуру в главном окне и добавить ее к текущей оси в каждом модуле с помощью plt.sca
. Это кажется гораздо менее надежным решением.
Замечательно! Спасибо большое! Я сейчас борюсь с проблемой вне темы: как я могу сделать то же самое с объектом basemap. Короче: я создаю «базовую карту» в одном модуле, и я хотел бы строить сюжет с использованием других модулей. Есть идеи? –
Извините, 'basemap' - это не то, что я использовал. Похоже, что базовая карта просто использует сопоставление с 'matplotlib', которое все еще используется для графиков. Таким образом, вы можете добавить его к текущему рисунку/оси таким же образом. Согласно http://matplotlib.org/basemap/users/examples.html: «Вы также можете построить карту на карте с помощью mplotlib pyplot [...], используя экземпляр Axes, связанный с Basemap." Может быть, 'ax = map.get_axis()'? –
спасибо! К сожалению, 'basemap' не имеет' map.get_axis() '. У этого есть 'map.ax', на который можно ссылаться на' ax'. Я попробовал и получил: 'AttributeError: Объект 'Figure' не имеет атрибута 'add_collection''. Теперь мне нужно понять, почему и как его решить. –