Python数据可视化~matplot默认配置修改(可解决中文、负号等显示问题)
原文链接:http://www.juzicode.com/archives/2421
在matplotlib中默认是不能正常显示中文:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
if __name__ == '__main__':
x = np.arange(-3,5)
y = x*x*x
plt.title("桔子code")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x,y)
plt.show()
运行后,title上的中文“桔子code”不能正常显示:
通常我们修改plt.rcParams属性,在画图前先设置中文字体,比如使用YouYuan(中文幼圆)字体:
if __name__ == '__main__':
plt.rcParams['font.sans-serif'] = ['YouYuan']
x = np.arange(-3,5)
y = x*x*x
plt.title("桔子code")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x,y)
plt.show()
运行之后发现中文字体正常了,但是负号显示不出来:
负号显示异常的问题也可以在画图前配置axes.unicode_minus为False解决。
plt.rcParams['font.sans-serif'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
除了上述的配置方法,还可以使用pyplot.rc()方法修改配置:plt.rc(‘font’,family=’Youyuan’,size=’15’)、plt.rc(‘axes’,unicode_minus=’False’)
前面的代码可以修改成这样:
print('\n-----欢迎来到juzicode.com')
print('-----公众号: 桔子code/juzicode \n')
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
if __name__ == '__main__':
plt.rc('font',family='Youyuan',size='15')
plt.rc('axes',unicode_minus='False')
x = np.arange(-3,5)
y = x*x*x
plt.title("桔子code")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x,y)
plt.show()
利用pyplot.rc()方法可以进一步修改更多的配置项
首先利用matplotlib.matplotlib_fname()找到默认的配置的说明文件:
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
'D:\\Python\\Python38\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'
打开配置说明文件matplotlibrc,比如说要修改字体,查找font.family,可以找到字体相关的默认配置,默认使用的字体是sans-serif,大小是10.0:
可以这样修改:plt.rc()方法的第1个入参为‘font’,比如说要修改font.size,传入入参size=‘15’,如果要修改font.family,传入入参family=’YouYuan’,注意要用字符串形式。
plt.rc('font',family='YouYuan',size='15')
继续看下unicode_minus的配置,在matplotlibrc找到该配置:
plt.rc()方法的第1个入参为‘axes’, 入参unicode_minus =’False’就能正常显示负号。
plt.rc('axes',unicode_minus='False')
继续看下axes的其他参数,比如修改边框的线宽axes.linewidth=‘5.0’,显示图片中的grid=‘True’:
print('\n-----欢迎来到juzicode.com')
print('-----公众号: 桔子code/juzicode \n')
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
if __name__ == '__main__':
plt.rc('font',family='Youyuan',size='15')
plt.rc('axes',unicode_minus='False')
plt.rc('axes',linewidth='5.0',grid='True')
x = np.arange(-3,5)
y = x*x*x
plt.title("桔子code")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x,y)
plt.show()
下图右侧是增大边框宽度和添加grid后的效果:
如果要修改这种多层配置项:
#xtick.major.size: 3.5 # major tick size in points
#xtick.minor.size: 2 # minor tick size in points
可以这样修改:
plt.rc('xtick.major',width='5',size='12')