是否可以在matlab中更改线条的颜色,中间图?
我正在开发matlab中的蚁群优化算法,我希望能够将不同路径的轨迹强度表示为可视化中的不同颜色
这是我正在生成的情节:
图表的跟踪部分由以下代码生成:
[Xt,Yt] = gplot(trails,XY,'-w'); % gplot does not allow custom colours
plot(Xt,Yt,'-o','Color',[0.75,0.75,0.75],...
'MarkerFaceColor',[0.75,0.75,0.75],'LineWidth',2);
我有一个包含每条边的强度值的矩阵,我希望能够根据线强度将线颜色的[0.75,0.75,0.75]值更改为某个缩放值 .
有没有办法通过使颜色值成为某个变量的函数来做到这一点?或者我必须单独绘制每一条线?
EDIT:
这是一些示例数据:
NODES: 4
<node x,y coords>
N1(10,10)
N2(82,19)
N3(38,77)
N4(30,150)
EDGES: 4
<edges connecting Na and Nb, T is intended greyscale luminance value>
E1(N1,N2) - T = 0.7
E2(N1,N3) - T = 0.3
E3(N2,N3) - T = 0.6
E4(N3,N4) - T = 0.4
以下是具有随机T值的图表:
2 回答
您可以通过复制所有2D输入向量(
x
和y
)来使用看起来像line
的surface
,以便有矩阵 . 这些矩阵可用于生成surface
对象,由于CData
属性,可以对线和点颜色进行更多控制 .首先,我必须生成样本数据:
现在我们有一组点和一个标量值(强度或其他任何东西)在显示屏上进行颜色编码 . 我们可以使用
surface
对象在一个图形对象中考虑所有这些参数:当然,您可以选择最适合您需求的色彩图(非常渐进的色彩图或非常清晰) . 这两种类型的色彩映射将更适合不同类型的着色 .
您还可以选择如何处理每行的颜色信息:
shading flat
=>整行的一种纯色,或shading interp
=>两个锚点之间的颜色渐变 .以下是使用不同着色设置的2种不同色彩图(
hsv
和gray
)的16种颜色的示例 .这应该可以让你最大程度地控制线条的外观,只需要处理一个图形对象(当然你总是可以单独绘制每一条线并设置自定义属性,但是你需要一个循环和很多图形对象) .
如果您想进一步控制点,可以忘记
surface
对象的标记,并叠加scatter
图来显示点 . 这将为您提供关于点外观的额外选项 . 下面是如何执行此操作的快速示例,请查看scatter
文档以获取更多用法示例 .文档:
surf
scatter
Coloring Mesh and Surface Plots
A previous answer about using surface object to display multi-colored lines
您可以通过操作
ColorOrder
属性使用plot
命令执行此操作:重塑的结果是你获得了许多线对象而不是单个对象,如果你有很多节点,这可能会很慢 .
(如果您有Matlab版本> 2014b,MathWorks建议使用
groot
而不是0
作为根对象句柄 . )