2016-07-20 26 views
1

Ich habe eine Reihe von verwandten Funktionen, die ich mit matplotlib.pyplot.subplots plotten, und ich muss in jedem Unterplot einen gezoomten Teil der entsprechenden Funktion enthalten.Wie fügt man Achsen zu Subplots hinzu?

Ich begann es wie erklärt here zu tun und es funktioniert perfekt, wenn es ein einzelnes Diagramm ist, aber nicht mit Nebenstellen.

Wenn ich es mit Subplots mache, bekomme ich nur einen einzigen Graphen mit allen Funktionen drin. Hier ist ein Beispiel dafür, was ich bisher:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(-10, 10, 0.01) 
sinx = np.sin(x) 
tanx = np.tan(x) 

fig, ax = plt.subplots(1, 2, sharey='row', figsize=(9, 3)) 

for i, f in enumerate([sinx, cosx]): 
    ax[i].plot(x, f, color='red') 
    ax[i].set_ylim([-2, 2]) 

    axx = plt.axes([.2, .6, .2, .2],) 
    axx.plot(x, f, color='green') 
    axx.set_xlim([0, 5]) 
    axx.set_ylim([0.75, 1.25]) 

plt.show(fig) 

Das Stück Code die folgende Grafik zeigt:

enter image description here

Wie ich neue Achsen erstellen und Handlung in jedem subfigure?

+0

verwenden @jeanrjc ich in jedem subplot eines dieser kleinen Boxen wollen. In der ersten möchte ich einen Teil der ersten Funktion (sinx), in der zweiten einen Teil der zweiten Funktion (tanx). Gerade jetzt ist die kleine Box entsprechend der großen Figur platziert und beide Funktionen sind in der gleichen Box. – Luis

+0

Ich finde es schließlich heraus, also löschte ich den Kommentar und machte stattdessen eine Antwort. – jrjc

Antwort

2

Wenn ich gut verstanden, können Sie inset_axes

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid.inset_locator import inset_axes 


x = np.arange(-10, 10, 0.01) 
sinx = np.sin(x) 
tanx = np.tan(x) 

fig, ax = plt.subplots(1, 2, sharey='row', figsize=(9, 3)) 

for i, f in enumerate([sinx, tanx]): 
    ax[i].plot(x, f, color='red') 
    ax[i].set_ylim([-2, 2]) 

    # create an inset axe in the current axe: 
    inset_ax = inset_axes(ax[i], 
          height="30%", # set height 
          width="30%", # and width 
          loc=10) # center, you can check the different codes in plt.legend? 
    inset_ax.plot(x, f, color='green') 
    inset_ax.set_xlim([0, 5]) 
    inset_ax.set_ylim([0.75, 1.25]) 
plt.show() 

inset_axe

+0

Das ist es tatsächlich! Vielen Dank! :) – Luis

+0

Vorsicht vor diesem Fehler: https://stackoverflow.com/questions/45103248/importerror-no-module-named-matplotlib-externals – Luis

Verwandte Themen