2017-02-16 5 views
0

Ich möchte ein Multi-Plot mit matplotlib erzeugen, und betten Sie ein Bild in der Ecke jedes meiner subplot.Matplotlib: Einbetten von Bildern in verschiedenen Handlungsstränge()

Ich konnte ein Bild in eine (einzelne) Plot Figur unter Verwendung der following example of the matplotlib documentation (Code unten zur Verfügung gestellt) einbetten.

ich jetzt versuchen, ein Bild in der Ecke jedes einer Reihe von Nebenhandlungen einzubetten. Ich kann nicht eine ähnliche Funktion wie der Wert des zu finden scheinen add_axes() auf dem meine vorherigen Beispiel verlassen.

Wie kann ich das gewünschte Layout erreichen?

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() 

Antwort

2

können Sie die gleichen Methoden verwenden, um ein Bild auf mehrere Handlungsstränge zu überlagern. Die Achsenposition muss für jedes Bild, das Sie überlagern möchten, relativ zur gesamten Abbildung definiert werden. Hier ist ein einfaches Beispiel, das Ihren Code und die Matplotlib-Dokumentation verwendet.

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() 

Ich habe gewählt, schrittweise die Position der neuen Achse relativ zum unteren Rand der Abbildung zu verringern. Sie können auch eine genaue Position für jede Bildüberlagerung angeben, die Sie hinzufügen möchten.

Der obige Code führt zu einem Plot, der wie folgt aussieht: Image Overlay Subplots

+0

@ bertrand-caron Wenn diese Antwort Ihre Frage geklärt, beachten Sie bitte [es als Lösung akzeptieren] (http://stackoverflow.com/help/jemand-Antworten). – Brian

Verwandte Themen