版权声明:未经本人同意不得转载! https://blog.csdn.net/yanpenggong/article/details/83652794
关于python中调用matplotlib画图,中文标注乱码
如下:
1、 常规情况
2、 特殊情况
- 图形注释(
plt.legend()
)
- 饼状图(
plt.pie()
)
解决办法:
- 针对常规情况
# 通用字体设置
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="本机字体路径")
# my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")
...
# 使用方法
plt.xlabel("内容描述",fontproperties=my_font)
- 针对特殊情况(图形注释(
plt.legend()
)、饼状图(plt.pie()
))下解决办法- 遇到图形注释(
plt.legend()
)解决办法# 通用字体设置 from matplotlib import font_manager my_font = font_manager.FontProperties(fname="本机字体路径") # my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc") ... # 使用方法 plt.legend(prop=my_font)
- 遇到饼状图(
plt.pie()
)解决办法# 通用字体设置 from matplotlib import font_manager my_font = font_manager.FontProperties(fname="本机字体路径") # my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc") ... # 使用方法 patches,l_text,p_text = plt.pie(place_count, labels=movie_name, autopct="%1.2f%%") for t in l_text: t.set_fontproperties(my_font) # 把每个文本设成中文字体
- 遇到图形注释(
实例1: matplotlib折线图及中文标注显示
from matplotlib import pyplot as plt
import random
# windows 和linux设置字体的方法
# import matplotlib
# font = {'family' : 'MicroSoft YaHei',
# 'weight' : 'bold',
# 'size' : 10}
# matplotlib.rc("font", **font)
# 通用字体设置
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")
x = range(0,120)
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8), dpi=80)
plt.plot(x,y)
x_label =list(x)
x_label_show = ["10点{}分".format(i) for i in range(60)]
x_label_show += ["11点{}分".format(i-60) for i in range(60,120)]
plt.xticks(x_label[::3],x_label_show[::3],rotation=45, fontproperties=my_font) # rotation旋转的度数
# 添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度 单位(°C)",fontproperties=my_font)
plt.title("10点到12点每分钟点气温变化情况",fontproperties=my_font)
plt.show()
效果展示:
实例2: matplotlib图形注释及中文标注显示
import matplotlib.pyplot as plt
from matplotlib import font_manager
# 中文字体准备
my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")
# 生成fig
plt.figure(figsize=(20, 8), dpi=80)
# 电影名字,每部电影对应的票房
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
movie_BoxOffice = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
first_day = [10587.6,10062.5,1275.7,2661,2406,1454,1452,1386,1319,1127,8886]
first_weekend=[36224.9,34479.6,11830,7985,7419,4362,4358,4159,3958,3382,26660]
x = range(len(movie_name))
# 使用 plt.bar 显示柱状图
# plt.bar: 填入的x坐标必须全是数字
# plt.bar(x, movie_BoxOffice, width=0.2, color=['b','r','g','y','c','m','y','k','c','g','g'])
width = 0.3
plt.bar(x, movie_BoxOffice, width, label="总票房")
plt.bar([i+width for i in x], first_day, width, label="第一天票房")
plt.bar([i+width*2 for i in x], first_weekend, width, label="第一周票房")
# 修改刻度,以电影名字显示
plt.xticks([i+width for i in x],movie_name, fontproperties=my_font)
# 增加标题,坐标描述
plt.xlabel("电影名", fontproperties=my_font)
plt.ylabel("数量(个)", fontproperties=my_font)
# 图形注释
plt.legend(prop=my_font, loc="upper right")
# 图形保存到该文件路径下
plt.savefig("bar.png")
plt.show()
效果展示:
实例3: matplotlib饼状图及中文标注显示
import matplotlib.pyplot as plt
from matplotlib import font_manager
# 中文字体准备
my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")
# 数据准备
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]
# 显示饼图
# patches:为了得到饼图的返回值
# l_texts:饼图外标签的文本
# p_texts:饼图内部文本的
patches,l_text,p_text = plt.pie(place_count, labels=movie_name, autopct="%1.2f%%", colors=['b', 'r', 'g', 'y', 'c', 'm', 'y', 'm', 'c', 'g', 'g'], shadow=True, startangle=90, labeldistance = 1.1, pctdistance = 0.8)
# labeldistance:文本的位置离远点有多远,1.1指1.1倍半径的位置
# autopct:圆里面的文本格式,%1.2f %%表示小数有2位,整数有1位的浮点数
# shadow:饼是否有阴影
# startAngle:起始角度为0,从0开始逆时针转,为第一块。一般选择从90度开始比较好看
# pctdistance:百分比的文本离圆心的距离
for t in l_text:
t.set_fontproperties(my_font) # 把每个文本设成中文字体
# 图形保存到该文件路径下
plt.savefig("pie.png")
# 保持饼形图圆形,保证长宽一样
plt.axis("equal")
plt.show()
效果展示: