15
4

4 回答 4

18

您可以使用FINDOBJ函数获取当前图形上所有线条对象的句柄:

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

然后您可以更改所有线对象的某些属性:

set(hline,'LineWidth',3)

或仅针对其中一些:

set(hline(1),'LineWidth',3) 
set(hline(2:3),'LineStyle',':') 
idx = [4 5];
set(hline(idx),'Marker','*') 
于 2012-02-17T17:07:54.823 回答
2
于 2012-02-17T16:53:09.623 回答
2

除了@yuk 的回答,如果你也画了一个图例

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

将返回N x 3行(或更准确地说 - lines plotted + 2x lines in legend)。我将在这里只查看所有绘制的线也在图例中的情况。

排序很奇怪:如果1 to 5绘制了 5 行(让我们记下它们)并添加了图例,您将拥有

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)

作为解决方案(星期五晚上的拖延),我做了这个小宝宝:

解决方案1:如果您不想重置图例

检测是否有图例以及绘制了多少行:

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

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

对于每一行,找到正确的句柄并为该行做一些事情(它也适用于相应的图例行)

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

这使得每一i-th行都带有width=i并且在这里您可以添加自动属性更改;

解决方案 2:保持简单

摆脱传说,照顾线条,重置传说。

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

这可能不适用于必须将图例放置在某个特定位置等的情况。

于 2014-04-04T17:35:39.070 回答
0

您也可以在查看器中右键单击该行,然后更改那里的属性。这也改变了相应的“传奇”条目(至少在 2014b 中是这样)。

于 2015-03-23T21:06:33.847 回答