大结局
在使用matplotlib进行绘图时,如不对参数进行修改,会出现中文字体显示乱码的问题。该问题可以通过在绘图之前进行字体设置解决,见我之前博客中的介绍https://blog.csdn.net/txh3093/article/details/106858041。
但在更改字体后发现当坐标轴刻度的指数部分的负号显示乱码,通过设置plt.rcParams['axes.unicode_minus'] = False也无济于事。
查询到大佬的方法,https://my.oschina.net/u/4354993/blog/3310029能够解决中文显示和指数中的符号显示问题,但这种源代码的修改会影响mathtext的正常显示,如果标签中想同时显示希腊字母和中文(单独显示任何一种都是正常的),中文部分将会乱码。由此可见该方法并不是特别好的方法,无法真正解决问题。
经过搜索查询,发现可以从局部字体设置入手,解决问题。现给出完美解决的方案,只需在绘图完成后调用后面所给的settick()函数即可让一切回归正常。局部刻度设置的函数在绘图后使用即可,具体如下:
def settick():
'''
对刻度字体进行设置,让上标的符号显示正常
:return: None
'''
ax1 = plt.gca() # 获取当前图像的坐标轴
# 更改坐标轴字体,避免出现指数为负的情况
tick_font = font_manager.FontProperties(family='DejaVu Sans', size=7.0)
for labelx in ax1.get_xticklabels():
labelx.set_fontproperties(tick_font) #设置 x轴刻度字体
for labely in ax1.get_yticklabels():
labely.set_fontproperties(tick_font) #设置 y轴刻度字体
ax1.xaxis.set_major_locator(ticker.MaxNLocator(integer=True)) # x轴刻度设置为整数
plt.tight_layout()
效果如图所示:(Plus:如果想要进行论文绘图,可参考https://blog.csdn.net/txh3093/article/details/107245174,文中已经对上述问题进行了优化。)