Ubuntu系统python3.6版本,networkx画关系图显示中文处理

Ubuntu系统python3.6版本,networkx画关系图显示中文处理

最近在学习用networkx库分析关系网。安装好networkx,配合matplotlib在最后生成图像的时候,结点一直显示方框,看了很多网友分享的解决方法,结合自己最后处理掉问题的思路,在此分享,希望可以帮助到有需要的朋友。

本文介绍的主要还是用的较多的字体文件替换法
  • 最初的状况,如图显示,简直很恐怖,
    显示框框时

  • 显示问题
    当运行代码时,显示如下:字体没有找到,返回默认字体DejaVu Sans

/home/****/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1316:
 UserWarning: 
 findfont: Font family ['sans-serif'] not found. 
 Falling back to DejaVu Sans
 (prop.get_family(), self.defaultFamily[fontext]))
  • 分析matplotlib中font_manager源代码
    发现变量self.defaultFamily[fontext]
if best_font is None or best_score >= 10.0:
            if fallback_to_default:
                warnings.warn(
                    'findfont: Font family %s not found. Falling back to %s' %
                    (prop.get_family(), self.defaultFamily[fontext]))
                default_prop = prop.copy()
                default_prop.set_family(self.defaultFamily[fontext])
                return self.findfont(default_prop, fontext, directory, False)

顺着self.defaultFamily[fontext]找下去,
发现,默认字体的确是DejaVu Sans,顺便验证了下;

        self.ttffiles = findSystemFonts(paths) + findSystemFonts()
        self.defaultFamily = {
            'ttf': 'DejaVu Sans',
            'afm': 'Helvetica'}
        self.defaultFont = {}

可以看出上述代码中,寻找系统字体函数中有个变量paths,继续找;

        paths = [os.path.join(rcParams['datapath'], 'fonts', 'ttf'),
                 os.path.join(rcParams['datapath'], 'fonts', 'afm'),
                 os.path.join(rcParams['datapath'], 'fonts', 'pdfcorefonts')]

发现字体存放在os.path路径下, 通过函数rcParams['***']找到

  • 解决问题
    根据os.path返回的结果,结合其他网友分享的文章得到最终的字体位置:
    os.path + site-packages/matplotlib/mpl-data/fonts/ttf

将想使用的字体命名为DejaVuSans.ttf替换上述路径下的DejaVuSans.ttf即可。

  • 显示如下
    显示中文后

  • 兜了一圈,其实最开始代码warning时就显示了调用地址,在这个地址基础上,再结合网友的方法其实就可以了。
    /home/****/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1316:

个人错误地方:开始路径找错了,一直在/anaconda3/pgks/matpltlib/lib/python3.6/site-packages/matplotlib路径下更改字体和配置文件,路径后半部分一样的,误以为是调用的库,浪费了很多时间。


[1]参考python3.5下networkx画图中文节点问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值