matplotlib legend()里字体如何修改

 更新时间:2023年09月14日 14:40:07   作者:沉思的雅典娜  
这篇文章主要介绍了matplotlib legend()里字体如何修改问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

matplotlib legend()里字体修改

背景:准备投论文,因为操蛋的模板要求,所以你得好好修改。

对legend()显示的内容的字体进行修改

labelss = plt.legend(loc='upper right').get_texts()
[label.set_fontname('Times New Roman') for label in labelss]
label = labelss[0]
label.set_fontproperties('SimSun')

如果你在一个plt显示多个线条,每个线条都设置label后,在最后通过plt.legend()方法显示,在这种情况下,要是中文设置宋体,英文设置Times New Roman,那你呵呵吧,通过set_fontname只会修改整体,而通过set_fontproperties才能对单个label进行修改。具体参考了matplotlib.Text的属性。

matplotlib 科学绘图字体设置

近期文章定稿,在确认最终版的插图时,被导师指出来很多没注意到的细节,其中印象最深的怕就是上下标的字体了,因为一开始用的是 Latex 的公式编译,所以没有注意到上下标的问题,结果在导师指出之后,才发现所有的上下标的字号都是有问题的,果然啊,大佬的一句指点对我们这些小菜鸡来说,就是一个质的提升啊。

借记录上下标的字体设置,将 Matplotlib 的所有相关的字体设置都记录下来。  

闲话少说,直接上代码吧,完事接着去爆肝。

# -*- coding: utf-8 -*-
"""
@ Author: 	Tsinlu_Lee
@ Mails: 	liqinlu19@mails.ucas.ac.cn
		 	liql0429@163.com
@ Address: 	Beijing, China
"""
import matplotlib as mpl
mpl.rcdefaults() # 恢复 mpl 为默认设置
mpl.mathtext.FontConstantsBase.sup1 = 0.45 # 注意,这个用法在matplotlib 3.4 以后被弃用了,替代
# 功能我没有找到,你们要是知道的话可以留言告诉我
"""
2023/06/14 更新
from matplotlib.mathtext import _mathtext as mathtext
mathtext.FontConstantsBase.sup1 = 0.45
找到了哈,这个功能移入_mathtext中,更新一下。参考引文如下👇
https://stackoverflow.com/questions/41837171
"""
# 一般来说,这些内容需要在代码最开始声明,为了增强比较,我在后面的代码中加了这两行代码,注意
# 设置的差别
import matplotlib.pyplot as plt
plt.rcParams["mathtext.default"]="regular" # 设置公式的字体和其他字体统一
font_options = {"family":"Arial","size":16} 
fig = plt.figure(figsize=(5,3.8),dpi=540) # mpl 使用 inch 作为画布大小的单位,1 inch = 2.54 cm,
# 为了标准规范的绘图输出,建议直接设置画布大小为 word 中的实际大小,然后设置字号为 11 号,即小四号
fig.text(0.18,0.78,"(a)",fontdict=font_options) # 其实在没有子图的时候,不需要加子图标号的,
# 但为了记录子图标号的字体设置,直接在这里加了。
ax1 = plt.subplot(111)
# 设置图例
plt.scatter(0.25,0.25,  # 点中心的 x, y 位置
            s=200, # 点的大小,设为与x, y 等长度的数组时,可以绘制气泡图
            marker="s", # 点的形状
            ec="k", # 点的边框颜色
            fc="wheat", # 点的填充颜色
            linewidths=1.2, # 点的边框粗细
            label="Test point") # 设置点的图例名称
plt.legend(loc="lower left", framealpha=0,
           prop = font_options) # 关键来了,在 mpl 中,大多数设置字体的命令都是 fontdict,
# 但设置图例时却变成了 prop
# 设置上下标
plt.text(x=0.5,y=0.9,s = "CO$_2$ flux (g C m$^{-2}$ s$^{-1}$)") # 使用默认字体
plt.text(x=0.5,y=0.8,s = "CO$_2$ flux (g C m$^{-2}$ s$^{-1}$)",ha="center") # 使用默认字体
mpl.rcdefaults() # 为了便于比较上下标的差别,先恢复 mpl 为默认设置
plt.text(x=0.5,y=0.7,s = "CO$_2$ flux (g C m$^{-2}$ s$^{-1}$)",ha="center",
		fontdict=font_options)
mpl.mathtext.FontConstantsBase.sup1 = 0.45 # 注意,这个用法在matplotlib 3.4 以后被弃用了,
# 替代功能我没有找到,你们要是知道的话可以留言告诉我
plt.text(x=0.5,y=0.6,
		s = "$\mathregular{CO_2}$ flux (g C m$\mathregular{^{-2}}$ s$\mathregular{^{-1}}$)",
         ha="center",fontdict=font_options)
# 设置横纵坐标刻度字体
plt.xticks([0,0.5,1])
plt.yticks([0,0.5,1])
"""
2023/07/12 更新
最近发现一个更花的玩法,记录一下
plt.xticks([0,0.5,1],[0,0.5,1],fontdict=font_options)
这句代码会把plt.xticks变为plt.text,直接可以定义字体,简直不要太爽。
"""
plt.tick_params(labelsize=14)
# labels = ax1.get_xticklabels() + ax1.get_yticklabels() 同时设置横纵坐标
labels = ax1.get_xticklabels() # 为了对比,只设置横坐标,纵坐标使用默认
[label.set_fontname('Arial') for label in labels]
# 设置横纵坐标标签的字体
# 为了对比,只设置横坐标,纵坐标使用默认
plt.xlabel("xLabels",fontdict=font_options)
plt.ylabel("yLabels") 
plt.subplots_adjust(bottom=0.16)
plt.savefig("./Test.png",dpi = 720)
plt.show()

最后吐槽一句,果然图还是要经过精心排版,就这副草图,从长宽比例到颜色搭配再到文字距离啥的,满满的无不是槽点,太难看了。

Test.png

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实现同时调用多个GPT的API

    Python实现同时调用多个GPT的API

    这篇文章主要为大家详细介绍了Python如何实现同时调用多个GPT的API,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-09-09
  • 详解Python 函数参数的拆解

    详解Python 函数参数的拆解

    这篇文章主要介绍了Python 函数参数的拆解,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • Python换行与不换行的输出实例

    Python换行与不换行的输出实例

    这篇文章主要介绍了Python换行与不换行的输出实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python实现划词翻译

    python实现划词翻译

    这篇文章主要为大家详细介绍了python实现划词翻译功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2012-07-07
  • python日期与时间戳的各种转换示例

    python日期与时间戳的各种转换示例

    这篇文章主要介绍了python日期与时间戳的各种转换示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Python实现Markdown转Word文档的工具详解

    Python实现Markdown转Word文档的工具详解

    这篇文章主要为大家详细介绍了一个基于Python的Markdown转Word文档工具的实现方案,该工具主要使用python-docx库,能够将Markdown文件自动转换为排版规范的Word文档,希望对大家有所帮助
    2026-04-04
  • Python爬虫数据的分类及json数据使用小结

    Python爬虫数据的分类及json数据使用小结

    这篇文章主要介绍了Python爬虫数据的分类及json数据使用小结,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • Python通过计算图片MD5值实现图片去重

    Python通过计算图片MD5值实现图片去重

    这篇文章主要为大家详细介绍了Python如何通过MD5实现图片去重的3种计算方式并进行了对比,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-05-05
  • yolov5返回坐标的方法实例

    yolov5返回坐标的方法实例

    这篇文章主要给大家介绍了关于yolov5返回坐标的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Python基于回溯法子集树模板解决取物搭配问题实例

    Python基于回溯法子集树模板解决取物搭配问题实例

    这篇文章主要介绍了Python基于回溯法子集树模板解决取物搭配问题,简单描述了搭配问题并结合实例形式分析了Python使用回溯法子集树模板解决取物搭配问题的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-09-09

最新评论