2013-05-19 50 views
2

我不能找到一種方法來呈現matlibplot圖表中的Unicode字符:Unicode字符呈現

# -*- coding: utf-8 -*- 
import matplotlib.pyplot as plt 
from numpy.random import normal 
from itertools import count 
import matplotlib 
a = {u'\u043f\u0430\u0440\u0435\u0430\u0442\u0430': 0.018144370928201092, u'\u0440\u0435\u043b\u0430\u0442\u0438\u0432\u0438\u0442\u0438\u0441\u0442\u0438\u0447\u043a\u0430\u0442\u0430': 0.008406336989671147, u'\u043d\u0430\u043e\u0453\u0430': 0.0704839024518581, u'\u0444\u0438\u0437\u0438\u043a\u0430': 0.025219010969013446, u'\u043a\u043e\u0438': 0.0039908251856718025, u'\u0438\u0437\u0431\u0443\u0432\u043d\u0430\u043b\u0430': 0.0035792606713834184, u'\u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430\u0442\u0430': 0.008406336989671147, u'\u043c\u0438\u043a\u0440\u043e\u0434\u0438\u043c\u0435\u043d\u0437\u0438\u0438': 0.008406336989671147, u'\u0434\u0430\u0432\u0430': 0.016812673979342295, u'\u0441\u0442\u0440\u0430\u043d\u0430': 0.008406336989671147} 

plt.bar(*zip(*zip(count(), a.values()))) 
plt.title("Some chart") 
plt.xticks(*zip(*zip(count(0.4), (a.keys())))) 
plt.xlabel("Value") 
plt.ylabel("Frequency") 

plt.show() 

回答

3

指定西裏爾字母字符的字體。例如,

import matplotlib as mpl 
mpl.rcParams['font.family'] = 'Arial' 

您的默認字體可能是'Helvetica',它不具備所需的字符字形。


import matplotlib.pyplot as plt 
from numpy.random import normal 
from itertools import count 
import matplotlib as mpl 
mpl.rcParams['font.family'] = 'Arial' 
a = {u'\u043f\u0430\u0440\u0435\u0430\u0442\u0430': 0.018144370928201092, u'\u0440\u0435\u043b\u0430\u0442\u0438\u0432\u0438\u0442\u0438\u0441\u0442\u0438\u0447\u043a\u0430\u0442\u0430': 0.008406336989671147, u'\u043d\u0430\u043e\u0453\u0430': 0.0704839024518581, u'\u0444\u0438\u0437\u0438\u043a\u0430': 0.025219010969013446, u'\u043a\u043e\u0438': 0.0039908251856718025, u'\u0438\u0437\u0431\u0443\u0432\u043d\u0430\u043b\u0430': 0.0035792606713834184, u'\u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430\u0442\u0430': 0.008406336989671147, u'\u043c\u0438\u043a\u0440\u043e\u0434\u0438\u043c\u0435\u043d\u0437\u0438\u0438': 0.008406336989671147, u'\u0434\u0430\u0432\u0430': 0.016812673979342295, u'\u0441\u0442\u0440\u0430\u043d\u0430': 0.008406336989671147} 

plt.bar(*zip(*zip(count(), a.values()))) 
plt.title("Gaussian Histogram") 
plt.xticks(*zip(*zip(count(0.4), a.keys()))) 
plt.xlabel("Value") 
plt.ylabel("Frequency") 

plt.show() 

enter image description here


如果沒有Arial字體,你可以生成已知到系統的字體文件與

import matplotlib.font_manager as font_manager 
print(sorted(font_manager.findSystemFonts())) 

您可以將列表然後嘗試使用

prop = font_manager.FontProperties(fname=path) 
mpl.rcParams['font.family'] = prop.get_name() 

其中path是由findSystemFonts()返回的路徑之一。

+0

我收到以下錯誤:UserWarning:findfont:Font family ['Arial'] not found。回到Bitstream Vera Sans (prop.get_family(),self.defaultFamily [fontext])) – badc0re

+0

即使使用上述函數仍然會出現相同的錯誤:( – badc0re

+3

我也解決了從緩存中刪除內容的問題庫sudo gedit〜/ .matplotlib/fontList.cache – badc0re

相關問題