According to NetworkX,
draw_networkx(G, pos=None, arrows=True, with_labels=True, **kwds),
node_size
can be scalar or array but font_size
needs to be integer. How can I change the font size to be bigger if the nodes are big? In fact, is it possible to change font sizes according to node sizes?
There isn't really a way of passing an array of font sizes. Both nx.draw
and draw_networkx_labels
only accept integers as font sizes for all labels. You'll have to loop over the nodes and add the text via matplotlib specifying some size. Here's an example, scaling proportionally to the node degree:
from matplotlib.pyplot import figure, text
G=nx.Graph()
e=[(1,2),(1,5),(2,3),(3,6),(5,6),(4,2),(4,3),(3,5),(1,3)]
G.add_edges_from(e)
pos = nx.spring_layout(G)
figure(figsize=(10,6))
d = dict(G.degree)
nx.draw(G, pos=pos,node_color='orange',
with_labels=False,
node_size=[d[k]*300 for k in d])
for node, (x, y) in pos.items():
text(x, y, node, fontsize=d[node]*5, ha='center', va='center')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With