draw_networkx_labels的可用“font-family”条目

时间:2013-11-25 01:26:22

标签: 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, **labels_params)

我的问题是我希望能够在输出图表中显示超过2种字体。

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

我从Networkx浏览了FontManager的代码,我只看到了“sans-serif”。​​

我在Ubuntu下的X11工作。

1 个答案:

答案 0 :(得分:5)

draw_networkx_labels源代码中找到一点,它确实归结为对ax.text的调用(其中ax是matplotlib轴)。这意味着您应该具有与任何普通MPL文本(docs)一样多的可配置性。

字体名称与字体系列

据我所知,字体名称是字体系列的一个实例;虽然因为 通用族(例如“serif”)通常作为字体系列的设置给出 变量。 http://www.w3schools.com/css/css_font.asp

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

查找完整的字体列表

因此,如果您使用here中的技术:

avail_font_names = [f.name for f in matplotlib.font_manager.fontManager.ttflist]

你得到所有(特定)选项。不知道你在哪里找到比这更完整的清单 泛型的font demo

这篇文章展示了searching by name的方法:

[i for i in matplotlib.font_manager.findSystemFonts(fontpaths=None, fontext='ttf') if 'times' in i.lower()]

在图表中为标签使用多种字体

从上面的avail_font_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()    

example figure showing different font labelling

解决'落回......'警告

注意:如果在找不到表单“UserWarning:findfont:Font family ['sans-serif']时出现错误。回到......”,当尝试使用字体时,即使它们确实存在,这个nabble dialog建议清除字体缓存:( 是,这将无法删除文件,但会自动生成。)

rm ~/.matplotlib/fontList.cache