如何在 MATLAB 中制作颜色可以独立于等高线高度变化的等高线图
How to make a contour plot where the colour can be varied independently of the contour height in MATLAB
我有一组x-y平面的数据,每个点和每个点都有多个"energies"关联。我已经可以在选定的能量下绘制该表面的恒定能量等高线,但问题是我还希望能够根据另一组数据的变化沿等高线更改颜色。
本质上,我想尝试绘制此图,但能够根据与轮廓位置无关的一组数据(忽略黑色虚线)改变任何轮廓上任何点的颜色:
我的第一个尝试是使用散点函数,想法是足够多的散点靠近在一起看起来大致像等高线的实线,但可以自由地独立设置每个散点的颜色。
然而,事实证明这看起来很糟糕,而且速度很慢,因为我基本上必须自己找到恒定能量表面。
我的第二次尝试是将数据拉伸成 3-D 并使用等值面函数创建面和顶点数据,这些数据可以用补丁绘制,补丁允许改变颜色。然后我会查看这个挤压表面的端部以获得等高线图。
然而,这给出了一个无限薄的表面,当从端点看时它会消失,如此处视图不是完全端点:
我想要的 3D 版本看起来像 http://imgur.com/xbShmC7
有谁知道:
一种绘制二维等高线的方法,它允许我独立地沿任何等高线改变颜色,
一种使第二张图片中使用的补丁图形对象更厚的方法,以便在端部查看时它们不会不可见。
谢谢。
如果您的数据集可以使用 contour3
函数,您可以通过句柄的菜单设置等高线图中每条线的颜色。
在下面的代码中,您可以看到如何为 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
颜色分配替换为您要使用的特定颜色集。
峰等值线图:默认颜色
峰等值线图:随机颜色
希望对您有所帮助。
我找到了解决方法,关键是使用ContourMatrix, which can be created using the contourc函数。
这会输出一个矩阵,其中包含构成等高线的点的 x-y 坐标列表。然后可以使用 line command. In order to vary the colour however, I used this trick 和 surface 命令绘制每个等高线。
如果我将颜色设置为仅随 x 位置变化,我的输出现在如下所示:
我有一组x-y平面的数据,每个点和每个点都有多个"energies"关联。我已经可以在选定的能量下绘制该表面的恒定能量等高线,但问题是我还希望能够根据另一组数据的变化沿等高线更改颜色。
本质上,我想尝试绘制此图,但能够根据与轮廓位置无关的一组数据(忽略黑色虚线)改变任何轮廓上任何点的颜色:
我的第一个尝试是使用散点函数,想法是足够多的散点靠近在一起看起来大致像等高线的实线,但可以自由地独立设置每个散点的颜色。 然而,事实证明这看起来很糟糕,而且速度很慢,因为我基本上必须自己找到恒定能量表面。
我的第二次尝试是将数据拉伸成 3-D 并使用等值面函数创建面和顶点数据,这些数据可以用补丁绘制,补丁允许改变颜色。然后我会查看这个挤压表面的端部以获得等高线图。 然而,这给出了一个无限薄的表面,当从端点看时它会消失,如此处视图不是完全端点:
我想要的 3D 版本看起来像 http://imgur.com/xbShmC7
有谁知道:
一种绘制二维等高线的方法,它允许我独立地沿任何等高线改变颜色,
一种使第二张图片中使用的补丁图形对象更厚的方法,以便在端部查看时它们不会不可见。
谢谢。
如果您的数据集可以使用 contour3
函数,您可以通过句柄的菜单设置等高线图中每条线的颜色。
在下面的代码中,您可以看到如何为 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
颜色分配替换为您要使用的特定颜色集。
峰等值线图:默认颜色
峰等值线图:随机颜色
希望对您有所帮助。
我找到了解决方法,关键是使用ContourMatrix, which can be created using the contourc函数。
这会输出一个矩阵,其中包含构成等高线的点的 x-y 坐标列表。然后可以使用 line command. In order to vary the colour however, I used this trick 和 surface 命令绘制每个等高线。
如果我将颜色设置为仅随 x 位置变化,我的输出现在如下所示: