MATLAB Answers

0

how to choose different colors for nodes

Asked by Kashfia Mahin on 25 Aug 2019 at 14:54
Latest activity Commented on by Kashfia Mahin on 27 Aug 2019 at 18:16
t = [1 1 1 1];
h = [2 3 4 5];
g = graph(t,h);
p = plot(g);
g.Edges.value = [10; 20; 20; 100];
g.Nodes.value = [0.3; 0.564; 12; 1; 0.005];
g.Nodes.NodeColors = g.Nodes.value;
g.Edges.EdgeColors = g.Edges.value;
p.NodeCData = g.Nodes.NodeColors;
p.EdgeCData = g.Edges.EdgeColors;
q= plot(g,'NodeCData',g.Nodes.NodeColors);
colorbar
t is the source node as input and h is demand node as output. I want to two different colors for input and output. But I don't find correct way. Plz help me to solve it.

  3 Comments

darova
on 25 Aug 2019 at 17:41
Maybe scatter()?
Adam Danz
on 25 Aug 2019 at 21:10
"I want to two different colors for input and output. But I don't find correct way."
Does that mean you want the point labeled "1" to be one color and all the other points should be a different color?
Guillaume
on 25 Aug 2019 at 21:21
@darova, scatter does not have an overload for graph objects. Only plot has.
@Kashfia, it seems you already know how to set the colour of the nodes using 'NodeCData' (although the syntax you use is undocumented, it's equivalent to 'NodeCData', 'flat'), so like Adam, I'm not sure what you're asking.

Sign in to comment.

1 Answer

Answer by Steven Lord
on 26 Aug 2019 at 0:47
 Accepted Answer

When you call plot on your graph or digraph object, specify the 'NodeColor' property. For example, here are two ways to create a digraph like the one in your example and plot it with node 1 being red and the others being green. I put each in their own figure window so you can compare the results.
d = digraph;
d = addedge(d, 1, 2:5);
You can explicitly specify a numnodes(d)-by-3 matrix of RGB values:
figure
p = plot(d, 'NodeColor', [1 0 0; 0 1 0; 0 1 0; 0 1 0; 0 1 0]);
Or you can plot with all the nodes being the same color and highlight ones that are in some way 'special'.
figure;
h = plot(d, 'NodeColor', 'g');
highlight(h, 1, 'NodeColor', 'r');

  1 Comment

Thanks Mr. Steven

Sign in to comment.