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

总结

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

相关文章

  • Django的CVB实例详解

    Django的CVB实例详解

    在本篇文章小编给大家整理的是关于Django的CVB实例详解内容,有需要的朋友们可以跟着学习下。
    2020-02-02
  • Python使用Pygame实现时钟效果

    Python使用Pygame实现时钟效果

    这篇文章主要为大家详细介绍了Python使用Pygame实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • python中字典的常见操作总结1

    python中字典的常见操作总结1

    这篇文章主要介绍了python中字典的常见操作总结,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • python中文件夹py文件相互引用方式

    python中文件夹py文件相互引用方式

    这篇文章主要介绍了python中文件夹py文件相互引用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • pytorch如何对image和label同时进行随机翻转

    pytorch如何对image和label同时进行随机翻转

    这篇文章主要介绍了pytorch如何对image和label同时进行随机翻转问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Pytorch 实现权重初始化

    Pytorch 实现权重初始化

    今天小编就为大家分享一篇Pytorch 实现权重初始化,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 快速了解Python相对导入

    快速了解Python相对导入

    这篇文章主要介绍了快速了解Python相对导入,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python+Appium自动化操作微信的教程分享

    Python+Appium自动化操作微信的教程分享

    Appium 是一个开源的自动化测试工具,支持 Android、iOS 平台上的原生应用,支持 Java、Python、PHP 等多种语言。本文主要介绍了Python+Appium自动化操作微信的教程,希望对大家有所帮助
    2023-01-01
  • pycharm创建并使用虚拟环境的详细图文教程

    pycharm创建并使用虚拟环境的详细图文教程

    Python的虚拟环境是正常的现实环境相对应的,在虚拟环境中安装的包是与现实环境隔离的,下面这篇文章主要给大家介绍了关于pycharm创建并使用虚拟环境的详细图文教程,需要的朋友可以参考下
    2022-08-08
  • Python在Scrapy中设置采集深度的实现

    Python在Scrapy中设置采集深度的实现

    Scrapy是一个功能强大的Python爬虫框架,通过设置采集深度,可以优化爬虫效率,并防止爬虫陷入无尽的链接循环,本文详细介绍了如何在Scrapy中控制采集深度,感兴趣的可以了解一下
    2024-10-10

最新评论