2014-12-19 346 views
-5

我一直無法在網絡或文檔中找到它,儘管這可能是由於我自己的無能。我在Octave中繪製函數,將x放在x向量中,將y放入fx向量中,然後調用plot(x,fx)。但是,由於該函數具有巨大的垂直跳躍,因此會產生不需要的垂直線。我可以做plot(x,fx,"."),但是這使得這條線很厚。如何用細線繪製不連續的功能?在MATLAB/Octave中繪製不連續函數

+1

你可以分享你的陰謀?我不明白爲什麼'plot(x,fx,'。')'使線條變粗?它會在技術上避免完全繪製線條並僅留下點。 – 2014-12-19 04:00:34

+2

如果引起巨大垂直跳躍的點是異常值,那麼你是否考慮徹底刪除它們?可以有幾種方法來做到這一點,比如通過將所有點設置在閾值以上,以NaN ... – 2014-12-19 04:02:12

+0

不,它更像是一個分段功能 – 2014-12-19 04:23:49

回答

1

在八度,可以減少這樣的標記的大小:

x = 0:0.1:100; 
fx = rand(length(x), 1)'; 
plot(x, fx, ".", "markersize", 1) 
+0

這已在評論中提出。顯然,OP對這種替代方案並不滿意。 – rayryeng 2014-12-22 03:42:31

+0

@rayryeng對不起,離開了幾天!這其實正是我需要的!我現在贊成這個評論。 – 2014-12-22 04:24:50

3

您可以在您的不連續處插入nan。 自動化,這可能是尋找大差商的一種方式:

x = linspace(0,30,1000); 
y = ceil(cos(x)); 
%%%%%%%%%%%%%%%%%%%%%%% 
dxLimit = 10; 
x = x(:).'; y = y(:).'; 
discontinuities = (abs(diff(y)./diff(x))>dxLimit); 
x = [x; nan(1,length(x))]; 
y = [y; nan(1,length(y))]; 
x(2*find(~discontinuities)) = []; 
y(2*find(~discontinuities)) = []; 
x = x(:).'; y = y(:).'; 
%%%%%%%%%%%%%%%%%%%%%%% 
plot(x,y,'-'); ylim(ylim+[-0.3,+0.3]); 
+0

非常好地完成! – rayryeng 2014-12-19 14:40:27

+0

我正在尋找一種只繪製點而不是繪製連線的方法。我遇到的問題是,當你只使用情節(...,...,「。」)選項時,你會得到一個非常粗糙的線條。 – 2014-12-19 19:30:35

+2

@RenéG:好吧,如果你只是想繪製點,你的問題:*「我如何繪製一個細線不連續的功能?」*可能有點關閉然後... – knedlsepp 2014-12-19 21:57:03