2010-01-08 4 views
10

Quelqu'un sait comment tracer une bordure autour d'un sous-placage individuel dans une figure de matplotlib? J'utilise pyplot.dessine une bordure autour des sous-placettes dans matplotlib

par exemple:

import matplotlib.pyplot as plt 
f = plt.figure() 
ax1 = f.add_subplot(211) 
ax2 = f.add_subplot(212) 
# ax1.set_edgecolor('black') 

..mais objets ont pas Axes « edgecolor », et je ne peux pas sembler trouver un moyen de décrire l'intrigue du niveau de la figure non plus.

Je suis en train d'encapsuler du code mpl et d'ajouter une interface utilisateur wx avec des contrôles que j'aimerais avoir en contexte en fonction de la sous-carte sélectionnée. C'est-à-dire que l'utilisateur clique sur le sous-schéma de la figure canevas - le sous-schéma est 'sélectionné' (un contour est dessiné autour de lui, idéalement en dent de scie) - Mises à jour de l'interface graphique pour modifier ce sous-schéma spécifique.

Répondre

8

Vous voulez essentiellement dessiner en dehors des axes, non? Je l'ai adapté de here. Il aurait besoin d'être nettoyé car j'ai utilisé des «facteurs de fudge» codés en dur.

#!/usr/bin/env python 
from pylab import * 

def f(t): 
    s1 = cos(2*pi*t) 
    e1 = exp(-t) 
    return multiply(s1,e1) 

t1 = arange(0.0, 5.0, 0.1) 
t2 = arange(0.0, 5.0, 0.02) 
t3 = arange(0.0, 2.0, 0.01) 

figure(figsize=(4, 4)) 
sub1 = subplot(211) 
l = plot(t1, f(t1), 'bo', t2, f(t2), 'k--', markerfacecolor='green') 
grid(True) 
title('A tale of 2 subplots') 
ylabel('Damped oscillation') 

## I ADDED THIS 
autoAxis = sub1.axis() 
rec = Rectangle((autoAxis[0]-0.7,autoAxis[2]-0.2),(autoAxis[1]-autoAxis[0])+1,(autoAxis[3]-autoAxis[2])+0.4,fill=False,lw=2) 
rec = sub1.add_patch(rec) 
rec.set_clip_on(False) 

subplot(212) 
plot(t3, cos(2*pi*t3), 'r.') 
grid(True) 
xlabel('time (s)') 
ylabel('Undamped') 

savefig('test.png') 

Produit:

enter image description here

Questions connexes