[英]Splitting a plot with if..else statement in matlab
我只想在特定值之前和之后以兩種不同的樣式繪制函數。 例如,對於線寬為1的-2*pi<= x <0
對於線寬為2的0<= x <=2*pi
,我已經寫過
for x=-2*pi:0.1:2*pi
y = sin(x);
if x < 0
plot(x,y,'LineWidth',1)
grid on
hold
else
plot(x,y,'LineWidth',2)
grid on
hold
end
end
但這不起作用
無需循環,只需定義布爾值的向量即可定義區域:
x = -2*pi:0.1:2*pi;
y = sin(x);
idx_period1 = (x >= -2*pi) & (x < 0);
idx_period2 = ~[idx_period1(2:end),false]; % ensure the regions touch.
plot(x(idx_period1),y(idx_period1),'LineWidth',1);
hold on
plot(x(idx_period2),y(idx_period2),'LineWidth',2);
如果您要點而不是連接線,請使用,
idx_period1 = (x >= -2*pi) & (x < 0);
idx_period2 = ~idx_period1;
scatter(x(idx_period1),y(idx_period1),'Marker','.','MarkerSize',1);
hold on
scatter(x(idx_period2),y(idx_period2),'Marker','.','Markersize',2);
您的代碼即將完成。 您只需要在手動定義軸即可。 這是修改后的版本。
figure(1); hold on;
axis([-2*pi 2*pi -1.5 1.5]);
for x=-2*pi:0.1:2*pi
y = sin(x);
if x < 0
plot(x,y,'-o', 'LineWidth',1)
% grid on
% hold
else
plot(x,y, 'r+', 'LineWidth',2)
% grid on
% hold
end
end
grid on;
hold off;
但是,@ Phil的方法會更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.