2015-06-28 9 views
3

Я создаю несколько рисунков в нескольких модулях, и я бы хотел наложить их на мой main.py.Как накладывать фигуры в matplotlib

Могу ли я вернуть полезную фигуру/график, который можно было бы повторно использовать в main.py, чтобы создать комбинированный рисунок?

Спасибо!

ответ

3

Решение состоит в том, чтобы установить фигуру/ось в 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. Это кажется гораздо менее надежным решением.

+0

Замечательно! Спасибо большое! Я сейчас борюсь с проблемой вне темы: как я могу сделать то же самое с объектом basemap. Короче: я создаю «базовую карту» в одном модуле, и я хотел бы строить сюжет с использованием других модулей. Есть идеи? –

+0

Извините, 'basemap' - это не то, что я использовал. Похоже, что базовая карта просто использует сопоставление с 'matplotlib', которое все еще используется для графиков. Таким образом, вы можете добавить его к текущему рисунку/оси таким же образом. Согласно http://matplotlib.org/basemap/users/examples.html: «Вы также можете построить карту на карте с помощью mplotlib pyplot [...], используя экземпляр Axes, связанный с Basemap." Может быть, 'ax = map.get_axis()'? –

+0

спасибо! К сожалению, 'basemap' не имеет' map.get_axis() '. У этого есть 'map.ax', на который можно ссылаться на' ax'. Я попробовал и получил: 'AttributeError: Объект 'Figure' не имеет атрибута 'add_collection''. Теперь мне нужно понять, почему и как его решить. –