对于最终的3D表面输出,我需要显示两种颜色的图例,X〉breakpoint为蓝色,Y〈breakpoint为绿色。我已经能够绘制这两种颜色的图,但很难弄清楚如何根据我的断点分割图例。
我一直在使用色彩Map工具,但没有成功,因为它仍然没有使用我定义的断点。颜色需要两个定义的区域没有阴影。
surf(xa,ya,Profile,'EdgeColor','none')
breakpoint = 1;
colors = [0 0 1; 0 1 1];
colormap(colors);
colorbar
3条答案
按热度按时间e1xvtsh31#
获取仅有2种颜色的表面的一种方法是使用
surf(...)
函数的Color
参数。您可以构建一个颜色矩阵
ColorData
,大小与数据相同,只有2个值:然后,如果使用指定的颜色参数绘制曲面,并应用2色颜色Map表,则所有级别将自行调整。
然而,如果我们让它像现在的colorbar标记无效,他们从0到1,而不是显示完整的数据范围。这是确定的,虽然,你可以创建一组有意义的标签和覆盖默认的。
代码如下所示(感谢Wolfie提供的演示数据):
breakpoint=1
和breakpoint=1.75
的结果如下所示:这种方法的缺点是,在颜色条上,断点总是位于颜色条的中间,即使实际断点更接近数据值的下限或上限。
9rygscc12#
您需要给予一个包含更多点的颜色贴图,特别是以断点为中心的贴图的“中间颜色”,但该颜色位于颜色贴图中相对于曲面最小值和最大值的正确点。
因此,如果您所需的断点是曲面最小值和最大值之间的1/4,您可以拥有一个100行的颜色Map,其中第25行包含中间/断点颜色。
你可以通过从一个包含断点的数组插入到具有一致间隔的数组来实现。请看下面的注解代码
如果您想要“清晰”的轮廓而不是梯度,则可以更改
interp1
的设置以使用先前的插值而不是线性插值breakpoint = 2
的绘图breakpoint = -1
的绘图breakpoint = 1
的绘图,但使用最接近插值而非线性插值您可以稍微压缩代码中的颜色Map生成部分,但我认为这会使其不太清楚发生了什么
30byixjq3#
可以使用caxis或ax.CLim将颜色Map表居中放置在断点周围,然后使用其Limits属性重置颜色条轴。