zoukankan      html  css  js  c++  java
  • pypthon 3.6.5 绘制柱状图中文乱码的基本、根本、高效之解决方案~

    最近在使用做一些数据统计、分析时需要用到画图,这里随大流使用matlab强大的python平台绘图组件pyplot来实现。

    然而在使用过程中遇到中文显示框框的问题,对于有强迫症的我简直不能忍啊~ 下面提供几个解决这个问题的方法

    本文环境:

    • Win7 64位
    • Python3.6.5(通过Anaconda安装)

    1、基本方法:
    通过设置中文字体,简单有效

    通过在绘制中文的时候加字体属性:

    YaHei = fmgr.FontProperties(fname='C:\Windows\Fonts\msyh.ttf')
    
    #添加图形属性
    plt.xlabel('行描述中文', fontproperties=YaHei)
    

    效果如下图:
    在这里插入图片描述
    完整代码:

    # -*- coding: utf-8 -*-
    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fmgr
    import numpy as np
     
    YaHei = fmgr.FontProperties(fname='C:\Windows\Fonts\msyh.ttf')
    
    
    #添加图形属性
    plt.xlabel('行描述中文', fontproperties=YaHei)
    plt.ylabel('列描述中文')
    plt.title('标题哪去了', fontproperties=YaHei)
     
    #y轴的数据
    y = [9, 14, 11, 13, 17, 5, 7, 11, 8, 19]  
    first_bar = plt.bar(range(len(y)), y, color='#2E8B57')  #初版柱形图,x轴0-9,y轴是列表y的数据,颜色是蓝色
     
    #x轴的数据
    index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    #x轴标签
    name_list = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']  
    
    #绘制x轴的标签
    plt.xticks(index, name_list) 
     
    #柱形图顶端数值显示
    for data in first_bar:
        y = data.get_height()
        x = data.get_x()
        plt.text(x+0.15, y , str(y), va='bottom')  
    
    #图片的显示及存储
    plt.show()   #这个是图片显示
    plt.close()   #关闭matplotlib
    

    但是如果我有很多文本的话,岂不是每一个文本绘制时都要配置这个参数?

    2、当前程序全局配置方法:
    通过在程序中配置字体环境

    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    

    效果如下:
    在这里插入图片描述
    完整代码如下:

    # -*- coding: utf-8 -*-
    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fmgr
    import numpy as np
    
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    #添加图形属性
    plt.xlabel('行描述中文')
    plt.ylabel('列描述中文')
    plt.title('标题哪去了')
     
    #y轴的数据
    y = [9, 14, 11, 13, 17, 5, 7, 11, 8, 19]  
    first_bar = plt.bar(range(len(y)), y, color='#2E8B57')  #初版柱形图,x轴0-9,y轴是列表y的数据,颜色是蓝色
     
    #x轴的数据
    index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    #x轴标签
    name_list = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']  
    
    #绘制x轴的标签
    plt.xticks(index, name_list) 
     
    #柱形图顶端数值显示
    for data in first_bar:
        y = data.get_height()
        x = data.get_x()
        plt.text(x+0.15, y , str(y), va='bottom') 
        
    #图片的显示及存储
    plt.show()   #这个是图片显示
    plt.close()   #关闭matplotlib
    

    3、安装中文原生支持插件方法:
    pyplotz官网

    • 安装方法1:通过pip install pyplotz安装
    • 安装方法2:如果你的网络不好无法安装或者各种超时,可以从这里点我直接下载,比如下载到D盘根目录,然后CMD命令行下cd到D盘根目录,使用pip install ./pyplotz-0.24.tar.gz 来安装

    安装好之后,pyplotz可以跟pyplot混合一起用,或者只在绘制中文的时候用,效果图跟上面一样就不重复了,使用的完整代码如下:

    # -*- coding: utf-8 -*-
    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fmgr
    import numpy as np
    from pyplotz.pyplotz import PyplotZ
    
    pltz = PyplotZ() # 这里创建一个支持中文的实例
    pltz.enable_chinese() # 开启中文支持,下面就可以用pltz替代之前的plt绘制中文了
    
    pltz.xlabel('行描述中文')
    pltz.ylabel('列描述中文')
    pltz.title('标题哪去了')
    #y轴的数据
    y = [9, 14, 11, 13, 17, 5, 7, 11, 8, 19]  
    first_bar = plt.bar(range(len(y)), y, color='#2E8B57')  
     
    #x轴的数据
    index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    #x轴标签
    name_list = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']  
    
    #绘制x轴的标签
    plt.xticks(index, name_list) 
     
    #柱形图顶端数值显示
    for data in first_bar:
        y = data.get_height()
        x = data.get_x()
        plt.text(x+0.15, y , str(y), va='bottom') 
    #图片的显示及存储
    plt.show()   #这个是图片显示
    plt.close()   #关闭matplotlib
    

    当然,在使用这个原生支持中文插件的同时,你还是可以自定义个性化的字体,比如设置图中的标题跟底部行描述分别为楷体、微软雅黑,可以如下设置:

    ......
    YaHei = fmgr.FontProperties(fname='C:\Windows\Fonts\msyh.ttf')
    SimKai = fmgr.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
    
    pltz = PyplotZ() 
    pltz.enable_chinese()
    pltz.xlabel('行描述中文', fontproperties=YaHei)
    pltz.ylabel('列描述中文')
    plt.title('标题哪去了',fontproperties=SimKai)
    ......
    

    结果如下图:
    在这里插入图片描述

  • 相关阅读:
    【矩阵乘法优化dp】[Codeforces 621E] Wet Shark and Blocks
    【2016常州一中夏令营Day7】
    【2016常州一中夏令营Day6】
    【2016常州一中夏令营Day5】
    【2016常州一中夏令营Day4】
    【2016常州一中夏令营Day3】
    【2016常州一中夏令营Day2】
    Aiopr的中文意思
    Bloom filter
    redis4.0.2集群搭建
  • 原文地址:https://www.cnblogs.com/xiaocy66/p/10589266.html
Copyright © 2011-2022 走看看