如何制作轮廓图,其中颜色可以在MATLAB中独立于轮廓高度而变化

时间:2015-12-31 16:35:31

标签: matlab plot contour

我在x-y平面上有一组数据,每个点和每个点都有多个"能量"相关。我已经可以用选定的能量绘制该表面的恒定能量轮廓,但问题是我还希望能够根据另一组数据的变化沿着轮廓改变颜色。

基本上我想尝试绘制此图形,但能够根据与轮廓位置无关的一组数据(忽略黑色虚线)改变任何轮廓上任何点的颜色:

Colours assigned to different contours using contour function

我的第一次尝试是使用散射函数,这个想法是,足够的散点在一起看起来大致类似于轮廓的实线,但可以自由地独立设置每个散点的颜色。 然而,看起来这看起来很糟糕,而且它很慢,因为我基本上必须自己找到恒定能量表面。

我的第二次尝试是将数据挤出到3-D并使用isosurface函数创建可以使用补丁绘制的面和顶点数据,并且补丁允许颜色变化。然后我会查看这个挤压表面,以获得轮廓图。 然而,这会产生一个无限小的表面,当观察结束时它会消失,如此处所示,其中视图不是完全结束:

Almost end-on view of extruded cylinders

我瞄准的3D版本看起来像http://imgur.com/xbShmC7

有没有人知道:

  1. 绘制二维轮廓的方法,允许我独立地沿着任何轮廓线改变颜色,

  2. 一种使补丁图形对象在第二张图片中使用的方法更厚,以便在查看时它们不可见。

  3. 感谢。

2 个答案:

答案 0 :(得分:1)

如果您使用数据集,可以使用contour3功能,则可以通过其手柄的menas设置等高线图中每条线的颜色。

在下面的代码中,您可以看到如何为peaks函数的每个轮廓线设置随机颜色。

[x,y,z]=peaks
[c,h] = contour3(z);
for i=1:length(h)
   set(h(i),'linewidth',2,'edgecolor',rand(3,1))
end
grid on

您可以使用您要使用的特定颜色集替换rand颜色分配。

峰值等高线图:默认颜色

enter image description here

峰轮廓图:随机颜色

enter image description here

希望这有帮助。

答案 1 :(得分:1)

我找到了一个解决方案,关键是使用ContourMatrix,可以使用contourc函数创建。

这将输出一个矩阵,其中包含构成轮廓的点的x-y坐标列表。然后可以使用line命令绘制每个轮廓。然而,为了改变颜色,我使用了this trick和surface命令。

如果我将颜色设置为仅在x位置变化,我的输出现在看起来像这样:

enter image description here