2018年1月24日星期三

pandas和matplotlib的中文显示问题(Mac & ubuntu)

import pandas as pd
pd.read_csv("example.csv",encoding="gbk")

不加encoding="gbk"的话会报错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte

原因:

因为系统默认是UTF8显示,但csv里面含有中文的话,系统又读不出来。所以要转gbk。

××××××××××××××××××××××××××××××

from matplotlib import pyplot as plt
from matplotlib.font_manager import FontManager, FontProperties


data = [30,53,12,45]

plt.rcParams['font.sans-serif'] = ['simhei']#设置中文
#调节图形大小,宽,高
plt.figure(figsize=(6,6))
#定义饼状图的标签,标签是列表
labels = ['http协议','ftp协议','rdp协议','qq协议']
#每个标签占多大,会自动去算百分比
sizes = [30,53,12,45]
colors = ['r','y','0.5','#FF00FF']
#将某部分爆炸出来, 使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙
explode = (0.01,0.01,0.01,0.01)

patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors,
                                labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
                                startangle = 90,pctdistance = 0.6)

#labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置
#autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
#shadow,饼是否有阴影
#startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
#pctdistance,百分比的text离圆心的距离
#patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本

#改变文本的大小
#方法是把每一个text遍历。调用set_size方法设置它的属性
for t in l_text:
    t.set_size=(30)
for t in p_text:
    t.set_size=(20)
# 设置x,y轴刻度一致,这样饼图才能是圆的
plt.axis('equal')
plt.legend()
plt.show()

直接在Mac和Ubuntu下跑都会中文显示变方块。

这时候需要先设置:

  1. 首先将windows中fonts目录下的simhei.ttf拷贝到/usr/share/matplotlib/mpl-data/fonts/ttf目录中。
  2. 修改配置文件 
    去除这三列之前的‘#’ 
    在font.sans-serif后添加,SimHei。
    ```
    #font.family         : sans-serif        
    #font.sans-serif     : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif   
    ...
    #axes.unicode_minus : False #解决负号'-'显示为方块的问题
    ```
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  3. 删除~/.cache/matplotlib的缓冲。(MAC下的目录不是这个,而是直接.matplotlib,大家自行注意判断)
   以上内容借鉴自:

   http://blog.csdn.net/github_33934628/article/details/77874674