最近想把部分python數據分析的代碼從win系統遷移到MAC上,有部分圖片上涉及中文顯示,遷移到MAC上warning:
UserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))
然后中文字體各種方塊,我本來的字體設置代碼是這樣的:
def plot_para():#設置畫圖參數及相關配置,如透明度,中文顯示 mpl.rcParams['font.sans-serif']='SimHei' mpl.rcParams['font.family']='sans-serif' mpl.rcParams['axes.unicode_minus']=False
網上給出了各種解決方案,總結下來無外乎下面兩種:
1.安裝對應字體,比如我的是微軟雅黑
2.將simhei.ttf拷貝到matplotlib的ttf文件夾下並刪除緩存文件夾
很遺憾這兩種對我都不work,從stackoverflow查找到了下面比較笨重的解決方案,算是暫時解決了問題。
def plot_para():#設置畫圖參數及相關配置,如透明度,中文啥啥的 mpl.rcParams['axes.unicode_minus']=False #手動設置字體路徑 return FontProperties(fname='/Users/wanghongbo8/Library/Fonts/msyh.ttf') #在設置繪圖的部分指定FontProperties,比如 plt.ylabel(u'T+4有效與T+1有效 GMV 比值',FontProperties=plot_para())
至此mac繪圖中文顯示無誤,但是這個方法比較笨,在涉及中文的部分都要手動指定fontproperties,當然可以通過函數重載來解決,卻也有點高射炮打蚊子的意味,報錯的源碼位於matplotlib的:
matplotlib/font_manager.py:1236行
看到此問題的朋友有能力可以深究一下原因,我個人如果解決了會更新此文。