2010-01-08 36 views
10

¿Alguien sabe cómo dibujar un borde alrededor de una subtrama individual dentro de una figura en matplotlib? Estoy usando pyplot.dibujar un borde alrededor de las subtramas en matplotlib

por ejemplo:

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

..pero Ejes objetos no tienen 'edgecolor', y me parece que no puede encontrar una manera de describir la trama desde el nivel cifra tampoco.

En realidad estoy envolviendo el código mpl y agregando una interfaz de usuario wx con controles que me gustaría tener en contexto, dependiendo de qué subtrama está seleccionada. es decir, el usuario hace clic en la subtrama dentro del lienzo de la figura: la subtrama está 'seleccionada' (tiene un contorno dibujado alrededor, idealmente en diente de sierra). Actualizaciones de la GUI a los controles actuales para modificar esa subtrama específica.

Respuesta

8

Básicamente, desea dibujar fuera de los ejes, ¿verdad?

Lo he adaptado desde here. Necesitaría limpieza ya que utilicé algunos "factores de dulce" codificados allí.

#!/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') 

Produce:

enter image description here

Cuestiones relacionadas