MATLAB: Modificare le proprietà delle linee di una figura caricato?
-
27-10-2019 - |
Domanda
Ho una domanda molto semplice, per gli utenti MATLAB:
Se carico un file cifra (.fig) con il comando di carico, c'è qualche modo per cambiare le linee di proprietà tracciati dalla riga di comando? (Larghezza, colore, pennarello, ecc.)
PD: Le prime due opzioni in base alle informazioni in Definire il colore delle linee per la stampa Su questa pagina ... solo lavoro se si utilizza il comando plot. A quanto pare sono inutili se si carica la figura.
Soluzione
È possibile ottenere le maniglie per tutti gli oggetti di linea sulla cifra attuale con FINDOBJ funzione :
hline = findobj(gcf, 'type', 'line');
Allora è possibile modificare alcune proprietà per tutti gli oggetti linea:
set(hline,'LineWidth',3)
o solo per alcuni di essi:
set(hline(1),'LineWidth',3)
set(hline(2:3),'LineStyle',':')
idx = [4 5];
set(hline(idx),'Marker','*')
Altri suggerimenti
Al fine di manipolare gli oggetti in una figura, è necessario avere accesso ai loro manici. Se si crea una figura usando le funzioni di tracciato, queste torneranno maniglie a voi. Quando si sta aprendo una figura, come è il vostro caso, è necessario seguire una grafica oggetti albero per trovare la maniglia per l'elemento specifico che si desidera manipolare.
In questa pagina ha informazioni sulla struttura di oggetti grafici .
Il percorso per le maniglie che si desidera dipenderà dalla vostra figura, ma, come un esempio, se la vostra figura è stata creata usando un semplice comando plot
, questo sarebbe un modo per immobili cambiare linea:
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)
In aggiunta alla risposta @yuk, se si dispone di un leggenda disegnato così ,
hline = findobj(gcf, 'type', 'line');
tornerà linee N x 3
(o più precisamente - lines plotted + 2x lines in legend
). sarò qui solo guardare il caso in cui tutte le linee che sono tracciati sono anche nella leggenda.
Il sequenziamento è strano:
in caso di 5 linee (notiamo loro 1 to 5
) tracciati e la leggenda ha aggiunto, si avrà
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)
Come soluzione (sera procrastinazione venerdì) ho fatto questo piccolo bambino:
Soluzione 1: se non si desidera reimpostare la leggenda
Rileva se v'è una leggenda e quante linee sono tracciate:
hline = findobj(gcf, 'type', 'line');
isThereLegend=(~isempty(findobj(gcf,'Type','axes','Tag','legend')))
if(isThereLegend)
nLines=length(hline)/3
else
nLines=length(hline)
end
Per ogni linea trovare le maniglie di destra e fare le cose per quella linea (ma vale anche per la corrispondente linea leggenda)
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
In questo modo ogni linea i-th
con la width=i
e qui si può aggiungere la proprietà automatizzato che cambia;
Soluzione 2: Keep it simple
sbarazzarsi della leggenda, prendersi cura delle linee, leggenda reset.
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
Questo potrebbe non essere adatto a situazioni in cui la leggenda deve essere collocato in un luogo speciffic etc.
È anche possibile fare clic destro sulla linea nel visualizzatore, e modificare le proprietà lì. Questo cambia anche la voce corrispondente 'leggenda' (almeno lo fa in 2014b).