How can I control node label font size of a graph or digraph object?

I want to plot a graph or digraph (R2015b). Unfortunately, the node labels are barely legible because the font size is too small.
How can I change the font size of the node labels?
My example code is from the Matlab documentation:
s = {'a' 'a' 'a' 'b' 'b' 'c' 'd' 'd' 'd'};
t = {'b' 'c' 'd' 'd' 'a' 'b' 'c' 'a' 'b'};
G = digraph(s,t);
labels = {'a/3' 'a/3' 'a/3' 'b/2' 'b/2' 'c' 'd/3' 'd/3' 'd/3'};
p = plot(G,'Layout','layered','EdgeLabel',labels);
highlight(p,[1 1 1],[2 3 4],'EdgeColor','g')
highlight(p,[2 2],[1 4],'EdgeColor','r')
highlight(p,3,2,'EdgeColor','m')
title('Page Rank Score Transfer Between Nodes')
I would expect p to have a property "NodeLabelFontSize" (or similar), but there is no property to control label appearance.
% get properties of p
get(p)

4 Comments

Not ideal, but what I ended up doing is removing the node labels and then making my own using text. Something like this:
h = plot(g,'NodeLabel',[])
for i=1:length
text(h.XData(i)+0.1,h.YData(i),num2str(i),'fontsize',16);
end
The placement is fixed to the right of the nodes, but you could do a random offset or try to do something smarter to avoid having the labels overlap edges.
I hope that helps.
This is an absurd limitation, which is making it very difficult to use the matlab graph functionality for teaching. The node label hack works ok. Edge labels are another problem altogether.
I'm curious to know how this could be modified to change the font size of the edge labels. Using a symmetric matrix A corresponding to a weighted, undirected network, I have
G=graph(A);
plot(G,'EdgeLabel',G.Edges.Weight)

Sign in to comment.

Answers (4)

Hi Jakob,
I looked into this and it appears that there currently isn't a way to change the font size of the labels of a graph.
-SHruti
You can customize node and edge labels with font properties, including NodeFontSize and EdgeFontSize, as of release R2018b.
any word on this? not only is it crazy that the graph label size can't be changed, but the default size is tiny!
>>
s = [1 1 1 2 2 3 3 4 5 5 6 7 7 8 8 9 10 11];
t = [2 3 10 4 12 4 5 6 6 7 9 8 10 9 11 12 11 12];
G = digraph(s,t)
G =
digraph with properties: Edges: [18×1 table] Nodes: [12×0 table]
plot(G,'Layout','force','EdgeColor',"#0072BD",'NodeColor', "#D95319",'NodeFontSize',15,'NodeFontWeight','bold')

Categories

Find more on Graph and Network Algorithms in Help Center and File Exchange

Products

Asked:

on 8 Feb 2016

Answered:

on 21 Sep 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!