如何在matlab中更改线的颜色(中间图)?

如何在matlab中更改线的颜色(中间图)?,matlab,plot,Matlab,Plot,是否可以在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,

是否可以在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]值更改为一些缩放值

有没有办法使颜色值成为某个变量的函数?还是我必须单独绘制每条线

编辑:

以下是一些示例数据:

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
%% // sample gplot data (from matlab documentation example)
reset(groot) %// optional, only if you modified the default groot properties previoulsly
k = 1:30;
[B,XY] = bucky;
[xt, yt] = gplot( B(k,k),XY(k,:) ) ;

%% // sample custom properties (point/line colors)
nColor = 16 ;                    %// to start with low number of colors
c = randi([1 nColor],size(xt)) ; %// random colors for each point
以下是随机T值的曲线图:

通过操纵ColorOrder属性,可以使用plot命令执行此操作:

A = rand(10) > .5;
xy = rand(10,2);
[xt, yt] = gplot(A, xy);

c = bone(size(xt,1)/3); % your colors here

set(0,'defaultAxesColorOrder', c);
plot(reshape(xt, 3, []), reshape(yt, 3, []));
重塑的结果是获得多个线对象而不是单个线对象,如果有多个节点,这可能会很慢

如果您的Matlab版本>2014b,MathWorks建议使用groot而不是0作为根对象句柄。

您可以通过复制所有2D输入向量x和y来使用看起来像线的曲面,以便生成矩阵。这些矩阵可用于生成曲面对象,由于CData属性,可以对线和点颜色进行更多控制

首先,我必须生成样本数据:

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
%% // sample gplot data (from matlab documentation example)
reset(groot) %// optional, only if you modified the default groot properties previoulsly
k = 1:30;
[B,XY] = bucky;
[xt, yt] = gplot( B(k,k),XY(k,:) ) ;

%% // sample custom properties (point/line colors)
nColor = 16 ;                    %// to start with low number of colors
c = randi([1 nColor],size(xt)) ; %// random colors for each point
现在我们有了一组点和一个标量值强度或其他任何要在显示器中进行颜色编码的东西。我们可以使用曲面对象在单个图形对象中考虑所有这些参数:

%% // create 'Matrix' style input from 2D line data
X = [xt,xt] ;                       %// replicate column vector "xt"
Y = [yt,yt] ;                       %// same for "yt"
C = [c c] ;                         %// replicate column vector "c"
Z = zeros(size(X)) ;                %// Z plane = 0

%% // DISPLAY - Surf only
figure
hs = surf(X,Y,Z,C,'EdgeColor','interp','FaceColor','none','Marker','*','LineWidth',1.5) ;
colormap(hsv(nColor)) %// choose a more distintive colormap (any other colormap will work)
colorbar
view(2)
当然,您可以选择最适合您需要的颜色贴图非常渐进的颜色贴图或非常独特的颜色贴图。这两种颜色贴图将更适合不同类型的着色

您还可以选择如何处理每行的颜色信息:

着色平面=>一种纯色表示整条线,或 shading interp=>两个定位点之间的颜色渐变。 下面是一个具有16种颜色的示例,用于2种不同的颜色贴图hsv和灰色,具有不同的着色设置。

这将使您能够最大限度地控制线条的外观,只需处理一个图形对象。当然,您始终可以单独绘制每条线条并设置自定义属性,但您将需要一个循环和许多图形对象

如果要进一步控制点,可以忽略曲面对象的标记,然后叠加散点图以显示点。这将为您提供点外观的额外选项。下面是一个关于如何做到这一点的快速示例,请查看散点文档以了解更多用法示例

%% // DISPLAY - Surf and Scatter
figure
hs = surf(X,Y,Z,C,'EdgeColor','interp','FaceColor','none','Marker','none') ;
hold on
hp = scatter(xt,yt,25,c,'filled','LineWidth',1.5) ;
colormap(hsv(nColor)) %// choose a more distintive colormap (any other colormap will work)
colorbar
view(2)
文档:
正如我在本文中详细介绍的,我建议使用一个薄表面而不是一条线,您可以完全控制线的着色方式,包括平面或内部过渡。然后,你可以添加一个散点图,这也可以让你控制每个点的颜色/形状/大小。如果你坚持直线,你需要单独绘制每个子轨迹,并在每次迭代中通过一些循环从一些颜色查找表中指定一种颜色,这些颜色映射到你的轨迹强度。顺便说一句,这在R中要容易得多。你能添加一小部分样本数据吗?有趣的是,在Matlab2012下,set命令失败。我在彩虹上看到许多不同的颜色。groot可能不存在于2015年之前的版本中。@CarlWitthoft,是的,groot对象相对较新。尝试改用0:set0,'defaultaxescolorder',c@Hoki谢谢,我编辑了答案,使用0而不是groot,因为0至少在2015a仍然有效。@Tokkot,很好。既然你在修改你的帖子,你可以明确地提到这一点。比如,如果你的Matlab版本>2014b,MathWorks建议使用groot而不是0作为根对象handleThanks。对于你的响应,我可以让它在随机颜色下正常工作,但我不太清楚如何生成c向量,其中edgei,j是一个特定值。。我将用4点图的一小部分数据更新我的问题