是否可以在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
以下是带有随机T值的图表:
答案 0 :(得分:3)
您可以通过复制所有2D输入向量(surface
和line
)来使用看起来像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 interp
和hsv
)的16种颜色的示例。
这应该可以让你最大限度地控制线条的外观,只需要处理一个图形对象(当然你总是可以单独绘制每一行并设置自定义属性,但是你需要一个循环和很多图形对象)。
如果您想进一步控制点数,可以忘记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
作为根对象句柄。)