I am using graph-tool and trying to draw graphs with node property of Chinese words. However, when I draw it using
# coding=utf-8
from graph_tool.all import *
# English string as vertex name
g = Graph(directed=False)
vprop_name = g.new_vertex_property("string")
eprop_name = g.new_edge_property("string")
g.vertex_properties["name"] = vprop_name
g.edge_properties["name"] = eprop_name
v1 = g.add_vertex()
v2 = g.add_vertex()
v3 = g.add_vertex()
e1 = g.add_edge(0, 1)
e2 = g.add_edge(0, 2)
vprop_name[v1] = "cat"
vprop_name[v2] = "dog"
vprop_name[v3] = "mouse"
eprop_name[e1] = "01"
eprop_name[e2] = "02"
graph_draw(g, vertex_text=g.vertex_properties["name"],
vertex_color="blue",
vertex_font_size=18,
edge_text=g.edge_properties["name"],
output_size=(300, 300),
output="english.png")
# Chinese string as vertex name
g = Graph(directed=False)
vprop_name = g.new_vertex_property("string")
eprop_name = g.new_edge_property("string")
g.vertex_properties["name"] = vprop_name
g.edge_properties["name"] = eprop_name
v1 = g.add_vertex()
v2 = g.add_vertex()
v3 = g.add_vertex()
e1 = g.add_edge(0, 1)
e2 = g.add_edge(0, 2)
vprop_name[v1] = "猫"
vprop_name[v2] = "狗"
vprop_name[v3] = "老鼠"
eprop_name[e1] = "01"
eprop_name[e2] = "02"
graph_draw(g, vertex_text=g.vertex_properties["name"],
vertex_color="blue",
vertex_font_size=18,
edge_text=g.edge_properties["name"],
output_size=(300, 300),
output="chinese.png")
when the "name" properties are Chinese texts, it cannot show any word. When the text is English, the figure is OK.
And this is the "chinese.png" result:
So I am wondering how I can make it show Chinese texts using this function.
Graph-tool uses cairo to do font rendering, which is a bit primitive. This means you need to choose by hand a font that supports Chinese characters:
graph_draw(g, vertex_text=g.vertex_properties["name"],
vertex_color="blue",
vertex_font_size=18,
vertex_font_family="HAN NOM A", # this font needs to be installed
edge_text=g.edge_properties["name"],
output="chinese.png")
The above gives me: