我有以下数组,其中包含 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;
但是,生成的图表连接“断开连接”的点。这是问题的照片:
如上所示,当它等于4时,两个段x1和等于11的x1连接。我不想让它们连接起来。如何摆脱没有将x1拆分为连续变量的连接线?
I.e
应连接这些点以形成红线:
2,3,4-
11,12,13
这些点应不连接以形成红线:
4,11
答案 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')