概述
在window下进行画图时,出现遇到中文就是方框的情况,发现是使用matplotlib包时出现的,这种情况很常见。
可以通过matplot的rcParams属性来设置
mpl.rcParams['font.sans-serif'] = ['SimHei'] #设置中文字体
mpl.rcParams['axes.unicode_minus'] = False
比如用matplot包画个水平柱状风险图
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import os,sys
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] #设置中文字体
mpl.rcParams['axes.unicode_minus'] = False
def barhPlot(dataLst, labels, prefix='bar_out', outdir='./'):
fig, ax = plt.subplots(figsize=(9, 6), frameon=True)
ypos = np.arange(len(dataLst))
colors = [ 'red' if data > 3.2 else ('orange' if data > 2.5 else ('yellow' if data > 1.5 else 'green'))for data in dataLst ]
ax.barh(ypos, dataLst, 0.8, align='center', color=colors, edgecolor=colors, alpha=0.5)
ax.set_yticks(ypos)
ax.set_yticklabels(labels, fontsize=18, fontweight='bold')
ax.set_xlim([0, 4.5])
plt.axvline(x=1.5, color='green', linestyle='--')
plt.axvline(x=2.5, color='orange', linestyle='--')
plt.axvline(x=3.2, color='red', linestyle='--')
ax.set_xticklabels(['0', '0.5', '1.0', '1.5', '2.0', '2.5', '3.0', '3.5', '>4.0'], fontsize=16)
ax.invert_yaxis()
ax.tick_params(top='off', right='off')
plt.tight_layout()
plt.savefig(os.path.join(outdir, prefix + '.png'), format='png', dpi=300)
plt.clf()
plt.close()
keyLabels = [u'癌症1',u'癌症2',u'癌症3',u'癌症4',u'癌症5',u'癌症6',u'癌症7']
OR = [0.92,2.246,1.631,2.051,1.017,1.006,1.005]
barhPlot(OR,keyLabels)
import numpy as np
import matplotlib.pyplot as plt
import os,sys
import matplotlib as mpl
% matplotlib inline
mpl.rcParams['font.sans-serif'] = ['SimHei'] #设置中文字体
mpl.rcParams['axes.unicode_minus'] = False
outdir ='C:/Users/user/Desktop/'
prefix='cancer_bar_out'
#数据
x_data = [u'肺癌',u'胃癌',u'结直肠癌',u'肝癌',u'鼻咽癌',u'食管癌',u'甲状腺癌',u'口腔和咽喉癌',u'前列腺癌',u'膀胱癌',u'睾丸癌',u'胰腺癌',u'肾癌',u'黑色素瘤',u'头颈部鳞状癌',u'脑膜瘤',u'神经胶质瘤',u'胆囊癌',u'慢性淋巴细胞白血病',u'皮肤癌',u'乳腺癌']
y_data = [2.42,5.35,1.00,1.12,1.64,1.34,1.00,0.56,1.52,2.81,0.15,1.00,1.00,1.00,1.45,1.00,1.00,1.50,1.02,1.04,1.23]
bar_width=0.8
colors = [ 'red' if data > 3.2 else ('orange' if data > 2.5 else ('yellow' if data > 1.5 else 'green'))for data in y_data ]
#y轴
fig, ax = plt.subplots(figsize=(9, 6), frameon=False)
ypos = np.arange(len(x_data))
ax.barh(ypos, width=y_data,color=colors, alpha=1.0, height=bar_width)
ax.set_yticks(ypos)
ax.set_yticklabels(x_data, fontsize=10, fontweight='bold')
for y, x in enumerate(y_data):
plt.text(x+0.5, y-bar_width/2, '%s' % x, ha='center', va='bottom')
# 设置标题
plt.title(u'癌症风险图')
# 为两条坐标轴设置名称
plt.xlabel(u'风险值')
plt.ylabel(u'癌种')
plt.savefig(os.path.join(outdir, prefix + '.png'), format='png', dpi=300) #放在show后面,图片为空白
plt.show()
最后
以上就是无奈黄豆为你收集整理的使用matplotlib包画水平柱状图时出现中文乱码的全部内容,希望文章能够帮你解决使用matplotlib包画水平柱状图时出现中文乱码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复