2017-02-16 2 views
0

Я хотел бы сгенерировать многострочный сюжет с matplotlib и вставить изображение в углу каждого моего подзаголовка.Matplotlib: Вложение изображений в несколько подзаголовков()

Я смог встроить изображение в (одиночный) график с использованием following example of the matplotlib documentation (код приведен ниже).

Теперь я пытаюсь встроить изображение в угол каждой из подсетей. Кажется, я не могу найти функцию, похожую на цифру add_axes(), на которой полагался мой предыдущий пример.

Как я мог достичь желаемого макета?

import pylab as plt 
from numpy import linspace 
from matplotlib.cbook import get_sample_data 
from scipy.misc import imread 

xs = linspace(0, 1, 100) 

def single_plot(): 
    fig, ax = plt.subplots() 
    ax.plot(xs, xs**2) 

    fn = get_sample_data("grace_hopper.png", asfileobj=False) 
    image_axis = fig.add_axes([0.65, 0.70, 0.3, 0.2], anchor='NE', zorder=10) 
    image_axis.imshow(imread(fn)) 

    plt.show() 
    plt.clf() 

def multi_plot(): 
    fig, axes = plt.subplots(4) 
    for axis in axes: 
     axis.plot(xs, xs**2) 
     # How to draw the same image as before in the corner of each subplot ? 
    plt.show() 

if __name__ == '__main__': 
    single_plot() 
    multi_plot() 

ответ

2

Вы можете использовать те же методы для наложения изображения на несколько подзаговоров. Позиция оси должна быть определена для каждого изображения, которое вы хотите наложить относительно фигуры в целом. Вот простой пример использования вашего кода и документации Matplotlib.

def multi_plot(): 
    fig, axes = plt.subplots(4, 1, figsize=(8, 10)) 
    fn = get_sample_data("grace_hopper.png", asfileobj=False) 
    image = plt.imread(fn) 
    x = 0 
    for axis in axes: 
     axis.plot(xs, xs**2) 

     # [left, bottom, width, height] 
     image_axis = fig.add_axes([0.125, 0.25 + x, 0.15, 0.65], 
           zorder=10, anchor="N") 
     image_axis.imshow(image) 
     image_axis.axis('off') 
     x -= 0.209 

    plt.show() 

Я выбрал постепенное уменьшение положения новой оси относительно нижней части рисунка. Вы также можете указать точную позицию для каждого наложения изображений, которое вы хотите добавить.

Приведенные выше код дает сюжет, который выглядит следующим образом: Image Overlay Subplots

+0

@ Бертран-карон Если этот ответ решен ваш вопрос, пожалуйста, рассмотреть [принять его в качестве решения] (http://stackoverflow.com/help/кто-ответы). – Brian