完美解决 matplotlib 对数上标负号乱码的问题

博客主要围绕Matplotlib绘图时出现的显示问题展开。使用Matplotlib绘图若不修改参数,会出现中文字体显示乱码,更改字体后坐标轴刻度指数部分负号也会显示乱码。一些方法虽能解决部分问题,但存在影响mathtext显示等弊端。最终给出从局部字体设置入手的完美解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大结局

      在使用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,文中已经对上述问题进行了优化。)

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

txh3093

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值