在学习matplotlib过程中,因为绘图需要显示文字,但是如果我们想要好看一点的格式就会输出中文,但是输出中文往往是乱码,网上找了很多资料看上去并不是很好,最后经过个人实践下面的这种方法是最实用的。
【未解决乱码之前的案例】
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
# fname 为 你下载的字体库路径,注意 SimHei.ttf 字体的路径
font1 = matplotlib.font_manager.FontProperties(fname="D:\python-workspace\SimHei.ttf")
raw_data = {'水果': ['香蕉', '苹果', '草莓'],
'价格': [2,4,10],
'数量': [5,3,6],}
df = pd.DataFrame(raw_data)
pos = list(range(len(df['水果'])))
width = 0.25
plt.bar([p - width/2 for p in pos], df['价格'], width, color='#FFCCCC', label=df['水果'][0])
plt.bar([p + width/2 for p in pos], df['数量'], width, color='#6699CC', label=df['水果'][1])
plt.xticks(np.linspace(0, 2, 3),df['水果'],fontproperties=font1)
plt.legend(['价格', '数量'], loc='upper left')
plt.show()
【输出结果】
【解决乱码之后的代码】
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
raw_data = {'水果': ['香蕉', '苹果', '草莓'],
'价格': [2,4,10],
'数量': [5,3,6],}
df = pd.DataFrame(raw_data)
pos = list(range(len(df['水果'])))
width = 0.25
plt.bar([p - width/2 for p in pos], df['价格'], width, color='#FFCCCC', label=df['水果'][0])
plt.bar([p + width/2 for p in pos], df['数量'], width, color='#6699CC', label=df['水果'][1])
plt.xticks(np.linspace(0, 2, 3),df['水果'])
plt.legend(['价格', '数量'], loc='upper left')
plt.show()
【结果】
【总结】
对比两张图,前面一张图使用的是下载的字体然后可以显示中文,但是 有些时候并不是万能的,所以摒弃第一种方案,接下来就是第二种方案两行代码解决。
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号