python绘图要求出现中文(针对matplotlib和seaborn两种库实现中文显示标题、坐标轴标题、图例)
python绘图显示中文解决方法
·
所遇问题
使用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库的解决方法时就搞定了,哈哈哈。
注意:找解决方法的时候,一定注意使用的是那种绘图库,不可张冠李戴啊!!!
更多推荐
所有评论(0)