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

时间:2015-09-29 04:59:51

标签: matlab plot

是否可以在matlab中更改线条的颜色,中间图?

我正在开发matlab中的蚁群优化算法,我希望能够将不同路径的路径强度表示为可视化中的不同颜色

以下是我正在制作的情节:

ACO graph

图表的跟踪部分由以下代码生成:

[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

以下是带有随机T值的图表:

tiny test graph

2 个答案:

答案 0 :(得分:3)

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

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

CData

现在我们有一组点和一个标量值(强度或其他任何东西)在显示屏上进行颜色编码。我们可以使用%% // 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 对象在一个图形对象中考虑所有这些参数:

surface

当然,您可以选择最适合您需求的色彩映射(非常渐进的色彩映射或非常清晰)。这两种类型的色彩映射将更适合不同类型的着色。

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

  • %% // 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) =&gt;整行的一种纯色,或
  • shading flat =&gt;两个锚点之间的渐变色。

以下是使用不同着色设置的2种不同色彩图(shading interphsv)的16种颜色的示例。 enter image description here

这应该可以让你最大限度地控制线条的外观,只需要处理一个图形对象(当然你总是可以单独绘制每一行并设置自定义属性,但是你需要一个循环和很多图形对象)。

如果您想进一步控制点数,可以忘记gray对象的标记,并叠加surface图来显示点。这将为您提供关于点外观的额外选项。以下是有关如何执行此操作的快速示例,请查看scatter文档以获取更多用法示例。

scatter

文档:

答案 1 :(得分:1)

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

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版本&gt; 2014b,MathWorks建议使用groot而不是0作为根对象句柄。)