所遇问题

使用Python绘图时,遇到中文显示不出来,显示的是方框形式:
在这里插入图片描述

且出现如下警告:
在这里插入图片描述
总结,Python绘图针对不同绘图库的不同解决显示中文情况,如下两种情况:

情况一: matplotlib库绘图显示中文

方式一

from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"] # 设置显示中文字体 宋体
mpl.rcParams["axes.unicode_minus"] = False #字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要设置正常显示负号

方式二

下面这种方式,中文显示为宋体,英文显示为Times New Roman

import matplotlib.pyplot as plt
from matplotlib import rcParams
config = {
        "font.family": 'serif',
        "mathtext.fontset": 'stix',  # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大
        "font.serif": ['SimSun'],  # 宋体
        'axes.unicode_minus': False  # 处理负号,即-号
    }
rcParams.update(config)

方式三

下面这种方式,不需要设置处理负号问题,注意需要再xlabel/ylabel等需要设置中文的位置加上fontproperties=my_font属性,这里的f是小写!!

from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\simsun.ttc",size=12)

# Data for plotting
t = np.arange(-1.0, 1.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)
plt.plot(t, s)
plt.xlabel('时间 (s)', fontproperties=my_font)# 设置 x轴名称字体  注意这里的fontproperties中f是小写!!
plt.ylabel('voltage (mV)')
plt.title('简单的标题', fontproperties=my_font)# 设置 标题字体
plt.show()

方式四

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimSun'] #宋体
# 等价于:plt.rcParams['font.family']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False 

方式五

import matplotlib
matplotlib.rc("font",family='SimSun')
plt.rc('axes', unicode_minus=False) 
或者:
font = {'family' : 'SimSun',
        'size'  : '12'}
# 设置 字体
plt.rc('font', **font)
# 解决中文字体下坐标轴负数的负号显示问题        
plt.rc('axes', unicode_minus=False) 

情况二:seaborn库绘图显示中文

当使用seaborn绘图时,在我使用情况一中的方式一、二、三、四、五让其显示中文时,是失效的,应该
使用sns.set方法,如下代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

tips = pd.read_csv('./seaborn-data-master/tips-zh.csv')
rc = {'font.sans-serif': 'SimHei',
      'axes.unicode_minus': False} #设置字体样式 字体负号显示
sns.set(context='notebook', style='ticks', rc=rc) #sns设置
sns.catplot(x="日期", y="总账单", data=tips)
plt.show()

当我遇到中文不显示,且出现“missing from current font”警告时,我就上网找方法解决,我找到了三、四个方法,还是显示不出来,然后突然想到,我用的是整体的库是seaborn画的图,可能其中出现了matplotlib中的plt等等方法,所以我解决方法采用的却是情况一针对matplotlib库的,Oh my god!!!
当我换成针对情况二的seaborn库的解决方法时就搞定了,哈哈哈。

注意:找解决方法的时候,一定注意使用的是那种绘图库,不可张冠李戴啊!!!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐