Matlab:行

时间:2017-11-14 23:40:42

标签: matlab

我有以下数组,其中包含 ALL 我的观点:

x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];

y = [1,9,8,5,2,8,1,4,3,11,13,15,16,13,12];

我使用以下命令绘制蓝线:

plot(x,y, 'blue');

我想为生成的绘图的部分颜色设置颜色。

示例:

x1 = [2,3,4,11,12,13];

x范围内的数字x1在原始图表的x轴上应为红色。

查看this post,作者建议根据一些符合条件的布尔值绘制不同的行。

因此,我已将我的代码更新为:

x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
y = [1,9,8,5,2,8,1,4,3,11,13,15,16,13,12];
x1 = [2,3,4,11,12,13];

canPlot = ismember(x, x1);
hold on;
plot(x,y, 'blue');
plot(x(canPlot), y(canPlot), 'red');
hold off;

但是,生成的图表连接“断开连接”的点。这是问题的照片:

enter image description here

如上所示,当它等于4时,两个段x1和等于11的x1连接。我不想让它们连接起来。如何摆脱没有将x1拆分为连续变量的连接线?

I.e

应连接这些点以形成红线:

2,3,4-

11,12,13

这些点应连接以形成红线:

4,11

1 个答案:

答案 0 :(得分:1)

您可以使用NaN作为要绘制的矢量中的连续值之间的分隔符,然后plot将其划分为单独的行。

我不知道Matlab中的一种舒适方式,可以在向量的中间追加和添加值,因此我将创建一个新的NaN矢量,然后将复制所需的匹配指数的值:

x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
y = [1,9,8,5,2,8,1,4,3,11,13,15,16,13,12];
x1 = [2,3,4,11,12,13];

xPlot=nan(1,length(x1)+sum(diff(x1)>1));
xPlot((1:length(x1))+[0 cumsum(diff(x1)>1)])=x(ismember(x,x1));
yPlot=nan(1,length(x1)+sum(diff(x1)>1));
yPlot((1:length(x1))+[0 cumsum(diff(x1)>1)])=y(ismember(x,x1));
figure; plot(x,y,'b')
hold on; plot(xPlot,yPlot,'r')

enter image description here

相关问题