2012-02-17 17 views
13

Tengo una pregunta muy simple, para usuarios de MATLAB:MATLAB: ¿Cambiar las propiedades de línea de una figura cargada?

Si cargo un archivo de figura (.fig) con el comando load, ¿hay alguna forma de cambiar las propiedades de las líneas trazadas desde la línea de comando? (ancho, color, marcador, etc.)

PD: Las primeras dos opciones según la información en Defining the Color of Lines for Plotting On this page… solo funcionan si utiliza el comando de trazado. Aparentemente son inútiles si cargas la figura.

Respuesta

17

puede obtener mangos para todos los objetos de línea en la cifra actual con FINDOBJ función:

hline = findobj(gcf, 'type', 'line'); 

a continuación, puede cambiar alguna propiedad para toda la línea de los objetos:

set(hline,'LineWidth',3) 

o sólo para algunos de ellos:

set(hline(1),'LineWidth',3) 
set(hline(2:3),'LineStyle',':') 
idx = [4 5]; 
set(hline(idx),'Marker','*') 
+0

¡Muchas gracias! Eso funcionó bien! – aarelovich

2

Para manipular objetos en una figura, debe tener acceso a sus controladores. Si crea una figura utilizando las funciones de trazado, éstas le devolverán los identificadores. Cuando abre una figura, como es su caso, necesita seguir un árbol de objetos gráficos para encontrar el manejador del elemento específico que desea manipular.

This page tiene información sobre la estructura de los objetos gráficos.

La ruta de los mangos que desea dependerá de su figura, pero, como ejemplo, si su figura se ha creado usando un simple comando plot, esto sería una manera de cambiar las propiedades de línea:

x = 0:0.1:2; 
plot(x,sin(x)); 

fig = gcf % get a handle to the current figure 
% get handles to the children of that figure: the axes in this case 
ax = get(fig,'children') 
% get handles to the elements in the axes: a single line plot here 
h = get(ax,'children') 
% manipulate desired properties of the line, e.g. line width 
set(h,'LineWidth',3) 
+0

Gracias por la información. Tomaré en consideración. Sin embargo, encuentro la alternativa anterior, más intuitiva. – aarelovich

2

Además de @yuk respuesta, si usted tiene una leyenda dibuja así,

hline = findobj(gcf, 'type', 'line'); 

volverá N x 3 líneas (o más precisamente - lines plotted + 2x lines in legend). Aquí veré solo el caso cuando todas las líneas que se trazan también están en la leyenda.

La secuenciación es raro: en el caso de 5 líneas (vamos a ellas observamos 1 to 5) trazada y la leyenda añadido, tendrá

hline: 
1 : 5 th line (mistical)  
2 : 5 th line (in legend) 
3 : 4 th line (mistical)  
4 : 4 th line (in legend) 
5 : 3 th line (mistical)  
6 : 3 th line (in legend) 
7 : 2 th line (mistical)  
8 : 2 th line (in legend) 
9 : 1 th line (mistical)  
10: 1 th line (in legend) 
11: 5 th line (in plot) 
12: 4 th line (in plot) 
13: 3 th line (in plot) 
14: 2 th line (in plot) 
15: 1 th line (in plot) 

Como solución (la dilación viernes por la noche) Hice este pequeño bebé:

Solución 1: si no desea restablecer la leyenda

detectar si hay una leyenda y el número de lin ES se trazan:

hline = findobj(gcf, 'type', 'line'); 
isThereLegend=(~isempty(findobj(gcf,'Type','axes','Tag','legend'))) 

if(isThereLegend) 
    nLines=length(hline)/3 
else 
    nLines=length(hline) 
end 

Para cada línea se encuentran los mangos rectos y hacer las cosas de esa línea (que se aplicará también a la línea correspondiente leyenda)

for iterLine=1:nLines 
    mInd=nLines-iterLine+1 
    if(isThereLegend) 
     set(hline([(mInd*2-1) (mInd*2) (2*nLines+mInd)]),'LineWidth',iterLine) 
    else 
    set(hline(mInd),'LineWidth',iterLine)  
    end 
end 

Esto hace que cada línea de i-th con el width=i y aquí puede agregar el cambio automático de propiedad;

Solución 2: que sea sencillo

Deshacerse de la leyenda, cuidar de las líneas, restablecer la leyenda.

legend off 
hline = findobj(gcf, 'type', 'line'); 
nLines=length(hline) 

for iterLine=1:nLines 
    mInd=nLines-iterLine+1 
    set(hline(mInd),'LineWidth',iterLine)  
end 
legend show 

esto podría no ser adecuado para situaciones en las que la leyenda debe ser colocado en algún lugar speciffic etc.

0

puede hacer clic también justo en la línea en el visor, y cambiar las propiedades allí. Esto también cambia la entrada de 'leyenda' correspondiente (al menos lo hace en 2014b).

Cuestiones relacionadas