Ubuntu “可用”;字体系列“;draw_networkx_标签的条目

Ubuntu “可用”;字体系列“;draw_networkx_标签的条目,ubuntu,matplotlib,networkx,font-family,Ubuntu,Matplotlib,Networkx,Font Family,我有以下代码: labels_params = {"labels":{n: "" if n[0] == "." else n for n in G.nodes () }, "font_family":"sans-serif", "alpha":.5, "font_size":16 } draw_networkx_labels (G, pos, **lab

我有以下代码:

    labels_params = {"labels":{n: "" if n[0] == "." else n for n in G.nodes () },
                     "font_family":"sans-serif",
                     "alpha":.5,
                     "font_size":16 }

    draw_networkx_labels (G, pos, **labels_params)
我的问题是,我希望能够在输出图形中显示2种以上的字体

我想知道如何检测“font_family”的所有可能条目

我从Networkx浏览了FontManager的代码,只看到“无衬线”


我在Ubuntu下的X11中工作。

draw\u networkx\u labels
源代码中翻了一番,它确实归结为调用
ax.text
(其中ax是matplotlib轴)。这意味着您应该具有与任何普通MPL文本()相同的可配置性

字体名称与字体系列 据我所知,字体名称是字体系列的一个实例;虽然因为 通用族(例如“serif”)通常作为字体族的设置 变量

这让我困惑了一段时间,如果我错了,请纠正我

查找字体的完整列表 因此,如果您使用以下技术:

您可以获得所有(特定)选项。不知道你在哪里能找到比 这是泛型的一个例子

这篇文章展示了一种方法:

为图形中的标签使用多个字体 从上面的
avail\u font\u names
列表中,我为这个例子挑选了三个;根据安装的内容,您可能需要替换其中的一些

import matplotlib.pyplot as plt
import networkx as nx

font_names = ['Sawasdee', 'Gentium Book Basic', 'FreeMono', ]
family_names = ['sans-serif', 'serif', 'fantasy', 'monospace']


# Make a graph
G  = nx.generators.florentine_families_graph()

# need some positions for the nodes, so lay it out
pos = nx.spring_layout(G)

# create some maps for some subgraphs (not elegant way)
subgraph_members  = [G.nodes()[i:i+3] for i in xrange(0, len(G.nodes()), 3)]

plt.figure(1)
nx.draw_networkx_nodes(G, pos)


for i, nodes in enumerate(subgraph_members):
    f = font_names[(i % 3)]
    #f = family_names[(i % 4)]
    # extract the subgraph
    g = G.subgraph(subgraph_members[i])
    # draw on the labels with different fonts
    nx.draw_networkx_labels(g, pos, font_family=f, font_size=40)

# show the edges too
nx.draw_networkx_edges(G, pos)


plt.show()    

解决“退回到…”警告 注意:如果找不到“UserWarning:findfont:Font family['sans-serif']的格式。退回到…”时出现错误,则在尝试使用字体(即使字体确实存在)时,建议清除字体缓存:(是的,这将无可挽回地删除一个文件,但它是自动生成的。)


据我所知,networkx的大部分绘图都使用matplotlib。有助于识别系统上可用的字体吗?Matplotlib通常有几个族可用——如感谢您的回复中所示。不,它没有帮助:(.这是draw_labels的手册页:--它没有任何参数“fontname”,只有fontfamily。我的问题是关于设置节点标签,而不是设置标题…:(任何评论都太多了!谢谢!谢谢!你碰巧在我还需要解决一个非常类似的字体问题的那天问了我;)很高兴它有用。我怎样才能使阿拉伯语字体工作?我应该使用哪种字体系列?
[i for i in matplotlib.font_manager.findSystemFonts(fontpaths=None, fontext='ttf') if 'times' in i.lower()]
import matplotlib.pyplot as plt
import networkx as nx

font_names = ['Sawasdee', 'Gentium Book Basic', 'FreeMono', ]
family_names = ['sans-serif', 'serif', 'fantasy', 'monospace']


# Make a graph
G  = nx.generators.florentine_families_graph()

# need some positions for the nodes, so lay it out
pos = nx.spring_layout(G)

# create some maps for some subgraphs (not elegant way)
subgraph_members  = [G.nodes()[i:i+3] for i in xrange(0, len(G.nodes()), 3)]

plt.figure(1)
nx.draw_networkx_nodes(G, pos)


for i, nodes in enumerate(subgraph_members):
    f = font_names[(i % 3)]
    #f = family_names[(i % 4)]
    # extract the subgraph
    g = G.subgraph(subgraph_members[i])
    # draw on the labels with different fonts
    nx.draw_networkx_labels(g, pos, font_family=f, font_size=40)

# show the edges too
nx.draw_networkx_edges(G, pos)


plt.show()    
rm ~/.matplotlib/fontList.cache