假设我按以下方式生成一个图:
x=linspace(-2,2,50);
y=linspace(-2,2,50);
[xx,yy]=meshgrid(x,y);
mesh(xx,yy,4-(xx.^2+yy.^2))
无论如何都要施加不等式,以便我只绘制x< Y'
答案 0 :(得分:1)
一种可能的黑客攻击:
x = y = linspace(-2, 2, 50);
[xx, yy] = meshgrid(x, y);
cond = xx < yy;
xx = xx .* cond;
yy = yy .* cond;
mesh(xx, yy, 4-(xx.^2+yy.^2));
严格地说,这将移动所有不符合标准(x,y)
的坐标对x < y
从当前位置到地块的原点:
答案 1 :(得分:0)
这与已经提供的另一个答案非常相似,但可能有助于解决奇怪的异常问题。你提到你的数据引起的答案。基本上创建1
xx < yy
的掩码,否则0
:
mask = xx < yy;
然后将此蒙版应用于xx
和yy
网格:
xx_mask = xx.*mask;
yy_mask = yy.*mask;
只有这样才能绘制结果:
mesh(xx_mask, yy_mask, 4-(xx_mask.^2 + yy_mask.^2));
基本上唯一的区别是,这样您就可以将xx
和yy
矩阵中的不需要的值设置为零,然后再对它们进行平方并绘制它们。
注意,这是用MATLAB而不是Octave测试的,但它们应该给出类似的结果。
答案 2 :(得分:0)
如果点(0,0)是图表的一部分,则上述解决方案才有用。否则它将点添加到图表然后尝试绘制,创建奇怪的效果,如下所示。
[![x=linspace(1,3,50);
y=linspace(1,3,50);
\[xx,yy\]=meshgrid(x,y);
mask = xx < yy;
xx_mask = xx.*mask;
yy_mask = yy.*mask;
mesh(xx_mask, yy_mask, 4-(xx_mask.^2 + yy_mask.^2));][1]][1]
可替代地做的是将x和y轴保持原样,并且仅在不满足条件的范围内将z轴值转换为NA。
x=linspace(1,3,50);
y=linspace(1,3,50);
[xx,yy]=meshgrid(x,y);
mask = xx < yy;
function result = applyCondition(cond)
result = ifelse(cond, 0, NA);
endfunction
zz = 4-(xx.^2 + yy.^2);
mesh(xx, yy, zz + arrayfun(@applyCondition, mask));
此解决方案适用于所有情况,无论(0,0)是否为您的图表的一部分。