zoukankan      html  css  js  c++  java
  • matplotlib汉字显示问题

    import random
    import os,time,sys
    import numpy,pandas
    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    
    #data = pandas.read_csv("ceshi.csv", encoding="utf-8")
    data = pandas.read_csv("ceshi.csv", encoding="GBK")
    print (data)
    data1 = pandas.read_excel("test.xlsx")
    print (data1)
    
    #中间要转换一下才能重新写入csv
    data2 = pandas.DataFrame(data1)
    data2.to_csv('ceshi1.csv',encoding="GBK", index=None)
    
    print (data.describe())
    print (data1.describe())
    print (data2.describe())
    
    #画图 data3
    = pandas.read_csv("ceshi3.csv", encoding="GBK") data3.plot(style = "--",linewidth = 10) plt.xlabel("x轴",fontproperties="SimSun") plt.ylabel("y轴",fontproperties="SimSun") font = FontProperties(fname=r'c:windowsfontsSTKaiti.ttf', size=12) plt.title('显示sin,cos曲线', fontproperties=font) plt.show()



    数据源如下:根据每一列的数据画图

     

    Python实现matplotlib显示中文方法详解 中给出了四种显示中文的方法。

    1.使用fontproperties

    在xlabel, ylabel, title后面使用fontproperties来指明所使用的字体的名称。

    import matplotlib.pyplot as plt
    # ...
    plt.xlabel("x轴")
    plt.ylabel("y轴", fontproperties="SimSun") # 步骤一  (宋体)
    plt.title("标题", fontproperties="SimHei") #     (黑体)
    plt.show()

    下面表格给出了中文字体对应的英文名称。通过测试,并不是每一个英文字体都是可以使用的。

    表格1:中文字体与对应的英文名称

    中文字体英文名称英文可用?.ttf可用?
    宋体 SimSun 不可以 不可以
    黑体 SimHei 可以 可以
    微软雅黑 Microsoft YaHei 可以 不可以
    微软正黑体 Microsoft JhengHei 可以 不可以
    新宋体 NSimSun 不可以 不可以
    新细明体 PMingLiU 不可以 不可以
    细明体 MingLiU 不可以 不可以
    标楷体 DFKai-SB 不可以 不可以
    仿宋 FangSong 可以 不可以
    楷体 KaiTi 可以 不可以
    隶书 LiSu 可以 不可以
    幼圆 YouYuan 可以 不可以
    华文细黑 STXihei 可以 可以
    华文楷体 STKaiti 可以 可以
    华文宋体 STSong 可以 可以
    华文中宋 STZhongsong 可以 不可以
    华文仿宋 STFangsong 可以 不可以
    方正舒体 FZShuTi 可以 不可以
    方正姚体 FZYaoti 可以 不可以
    华文彩云 STCaiyun 可以 可以
    华文琥珀 STHupo 可以 可以
    华文隶书 STLiti 可以 可以
    华文行楷 STXingkai 可以 不可以
    华文新魏 STXinwei 可以 不可以

    2.使用font

    使用font设置,可以设置字体的大小。可以使用的ttf文件及其名称参见表格1的信息。

    font = FontProperties(fname=r'c:windowsfontsSTKaiti.ttf', size=12)


    plt.xlabel("时间(秒)", fontproperties=font)
    plt.ylabel("函数值(X)", fontproperties=font)
    plt.title('显示sin,cos曲线', fontproperties=font)

    #记得要导入库文件

    from matplotlib.font_manager import FontProperties

    3.使用rcParams参数

    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False  # Solve the minus sign problems
    
    plt.plot(t, sindata, label='sin(x)正弦')
    plt.plot(t, cosdata, label='cos(x^2)余弦')
    
    plt.xlabel("时间(秒)")
    plt.ylabel("函数值(X)")
    plt.title('显示sin,cos曲线')

    4.使用rc参数

    使用rc参数可以设定更多的font的参数。比如下面测示例,可以设定字体(font)、加黑(weight), 尺寸(size)。

    ont = {'family':'SimHei',
            'weight':'bold',
            'size':'12'}
    plt.rc('font', **font)
    plt.rc('axes', unicode_minus=False)
    
    plt.plot(t, sindata, label='sin(x)正弦')
    plt.plot(t, cosdata, label='cos(x^2)余弦')
    
    plt.xlabel("时间(秒)")
    plt.ylabel("函数值(X)")
    plt.title('显示sin,cos曲线')
    • 方式二用时才设置,且不会污染全局字体设置,更灵活
    • 方式三、方式四不需要对字体路径硬编码,而且一次设置,多次使用,更方便。
    #!/usr/local/bin/python
    # -*- coding: gbk -*-
    from headm import *
    from matplotlib.font_manager import FontProperties
    t = linspace(0, 10, 400)
    sindata = sin(t)
    cosdata = cos(t**2)
    #font = FontProperties(fname=r'c:windowsfontsSTSong.ttf', size=16) #plt.rcParams['font.sans-serif'] = ['SimHei'] #plt.rcParams['axes.unicode_minus'] = False # Solve the minus sign problems


    font = {'family':'SimHei', 'weight':'bold', 'size':'12'}
    plt.rc(
    'font', **font) plt.rc('axes', unicode_minus=False) plt.plot(t, sindata, label='sin(x)正弦') plt.plot(t, cosdata, label='cos(x^2)余弦') plt.xlabel("时间(秒)") plt.ylabel("函数值(X)") plt.title('显示sin,cos曲线')

    #plt.xlabel("时间(秒)", fontproperties=font) #plt.ylabel("函数值(X)", fontproperties=font) #plt.title('显示sin,cos曲线', fontproperties=font)

    plt.grid(True) plt.tight_layout() plt.legend(loc='upper right') plt.show() #------------------------------------------------------------ # END OF FILE : TEST1.PY #============================================================
  • 相关阅读:
    C++面试题
    kalman滤波原理
    开blog
    Linux图片批处理
    Debian使用相关
    Ubuntu grub引导修复
    Debian系统vim中文显示乱码问题
    Debian配置Apache2支持mod-python和cgi模块
    linux下解压被分割的zip文件
    Ubuntu 16.04 启动错误 "a start job is running for hold until boot process finishes up"
  • 原文地址:https://www.cnblogs.com/chengxuyonghu/p/13773606.html
Copyright © 2011-2022 走看看