matplotlib legend()里字體如何修改
matplotlib legend()里字體修改
背景:準(zhǔn)備投論文,因?yàn)椴俚暗哪0逡?,所以你得好好修改?/p>
對(duì)legend()顯示的內(nèi)容的字體進(jìn)行修改
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')如果你在一個(gè)plt顯示多個(gè)線條,每個(gè)線條都設(shè)置label后,在最后通過(guò)plt.legend()方法顯示,在這種情況下,要是中文設(shè)置宋體,英文設(shè)置Times New Roman,那你呵呵吧,通過(guò)set_fontname只會(huì)修改整體,而通過(guò)set_fontproperties才能對(duì)單個(gè)label進(jìn)行修改。具體參考了matplotlib.Text的屬性。
matplotlib 科學(xué)繪圖字體設(shè)置
近期文章定稿,在確認(rèn)最終版的插圖時(shí),被導(dǎo)師指出來(lái)很多沒(méi)注意到的細(xì)節(jié),其中印象最深的怕就是上下標(biāo)的字體了,因?yàn)橐婚_(kāi)始用的是 Latex 的公式編譯,所以沒(méi)有注意到上下標(biāo)的問(wèn)題,結(jié)果在導(dǎo)師指出之后,才發(fā)現(xiàn)所有的上下標(biāo)的字號(hào)都是有問(wèn)題的,果然啊,大佬的一句指點(diǎn)對(duì)我們這些小菜雞來(lái)說(shuō),就是一個(gè)質(zhì)的提升啊。
借記錄上下標(biāo)的字體設(shè)置,將 Matplotlib 的所有相關(guān)的字體設(shè)置都記錄下來(lái)。
閑話少說(shuō),直接上代碼吧,完事接著去爆肝。
# -*- coding: utf-8 -*-
"""
@ Author: Tsinlu_Lee
@ Mails: liqinlu19@mails.ucas.ac.cn
liql0429@163.com
@ Address: Beijing, China
"""
import matplotlib as mpl
mpl.rcdefaults() # 恢復(fù) mpl 為默認(rèn)設(shè)置
mpl.mathtext.FontConstantsBase.sup1 = 0.45 # 注意,這個(gè)用法在matplotlib 3.4 以后被棄用了,替代
# 功能我沒(méi)有找到,你們要是知道的話可以留言告訴我
"""
2023/06/14 更新
from matplotlib.mathtext import _mathtext as mathtext
mathtext.FontConstantsBase.sup1 = 0.45
找到了哈,這個(gè)功能移入_mathtext中,更新一下。參考引文如下??
https://stackoverflow.com/questions/41837171
"""
# 一般來(lái)說(shuō),這些內(nèi)容需要在代碼最開(kāi)始聲明,為了增強(qiáng)比較,我在后面的代碼中加了這兩行代碼,注意
# 設(shè)置的差別
import matplotlib.pyplot as plt
plt.rcParams["mathtext.default"]="regular" # 設(shè)置公式的字體和其他字體統(tǒng)一
font_options = {"family":"Arial","size":16}
fig = plt.figure(figsize=(5,3.8),dpi=540) # mpl 使用 inch 作為畫(huà)布大小的單位,1 inch = 2.54 cm,
# 為了標(biāo)準(zhǔn)規(guī)范的繪圖輸出,建議直接設(shè)置畫(huà)布大小為 word 中的實(shí)際大小,然后設(shè)置字號(hào)為 11 號(hào),即小四號(hào)
fig.text(0.18,0.78,"(a)",fontdict=font_options) # 其實(shí)在沒(méi)有子圖的時(shí)候,不需要加子圖標(biāo)號(hào)的,
# 但為了記錄子圖標(biāo)號(hào)的字體設(shè)置,直接在這里加了。
ax1 = plt.subplot(111)
# 設(shè)置圖例
plt.scatter(0.25,0.25, # 點(diǎn)中心的 x, y 位置
s=200, # 點(diǎn)的大小,設(shè)為與x, y 等長(zhǎng)度的數(shù)組時(shí),可以繪制氣泡圖
marker="s", # 點(diǎn)的形狀
ec="k", # 點(diǎn)的邊框顏色
fc="wheat", # 點(diǎn)的填充顏色
linewidths=1.2, # 點(diǎn)的邊框粗細(xì)
label="Test point") # 設(shè)置點(diǎn)的圖例名稱
plt.legend(loc="lower left", framealpha=0,
prop = font_options) # 關(guān)鍵來(lái)了,在 mpl 中,大多數(shù)設(shè)置字體的命令都是 fontdict,
# 但設(shè)置圖例時(shí)卻變成了 prop
# 設(shè)置上下標(biāo)
plt.text(x=0.5,y=0.9,s = "CO$_2$ flux (g C m$^{-2}$ s$^{-1}$)") # 使用默認(rèn)字體
plt.text(x=0.5,y=0.8,s = "CO$_2$ flux (g C m$^{-2}$ s$^{-1}$)",ha="center") # 使用默認(rèn)字體
mpl.rcdefaults() # 為了便于比較上下標(biāo)的差別,先恢復(fù) mpl 為默認(rèn)設(shè)置
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 # 注意,這個(gè)用法在matplotlib 3.4 以后被棄用了,
# 替代功能我沒(méi)有找到,你們要是知道的話可以留言告訴我
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)
# 設(shè)置橫縱坐標(biāo)刻度字體
plt.xticks([0,0.5,1])
plt.yticks([0,0.5,1])
"""
2023/07/12 更新
最近發(fā)現(xiàn)一個(gè)更花的玩法,記錄一下
plt.xticks([0,0.5,1],[0,0.5,1],fontdict=font_options)
這句代碼會(huì)把plt.xticks變?yōu)閜lt.text,直接可以定義字體,簡(jiǎn)直不要太爽。
"""
plt.tick_params(labelsize=14)
# labels = ax1.get_xticklabels() + ax1.get_yticklabels() 同時(shí)設(shè)置橫縱坐標(biāo)
labels = ax1.get_xticklabels() # 為了對(duì)比,只設(shè)置橫坐標(biāo),縱坐標(biāo)使用默認(rèn)
[label.set_fontname('Arial') for label in labels]
# 設(shè)置橫縱坐標(biāo)標(biāo)簽的字體
# 為了對(duì)比,只設(shè)置橫坐標(biāo),縱坐標(biāo)使用默認(rèn)
plt.xlabel("xLabels",fontdict=font_options)
plt.ylabel("yLabels")
plt.subplots_adjust(bottom=0.16)
plt.savefig("./Test.png",dpi = 720)
plt.show()最后吐槽一句,果然圖還是要經(jīng)過(guò)精心排版,就這副草圖,從長(zhǎng)寬比例到顏色搭配再到文字距離啥的,滿滿的無(wú)不是槽點(diǎn),太難看了。

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)同時(shí)調(diào)用多個(gè)GPT的API
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)同時(shí)調(diào)用多個(gè)GPT的API,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09
python日期與時(shí)間戳的各種轉(zhuǎn)換示例
這篇文章主要介紹了python日期與時(shí)間戳的各種轉(zhuǎn)換示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Python實(shí)現(xiàn)Markdown轉(zhuǎn)Word文檔的工具詳解
這篇文章主要為大家詳細(xì)介紹了一個(gè)基于Python的Markdown轉(zhuǎn)Word文檔工具的實(shí)現(xiàn)方案,該工具主要使用python-docx庫(kù),能夠?qū)arkdown文件自動(dòng)轉(zhuǎn)換為排版規(guī)范的Word文檔,希望對(duì)大家有所幫助2026-04-04
Python爬蟲(chóng)數(shù)據(jù)的分類及json數(shù)據(jù)使用小結(jié)
這篇文章主要介紹了Python爬蟲(chóng)數(shù)據(jù)的分類及json數(shù)據(jù)使用小結(jié),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03
Python通過(guò)計(jì)算圖片MD5值實(shí)現(xiàn)圖片去重
這篇文章主要為大家詳細(xì)介紹了Python如何通過(guò)MD5實(shí)現(xiàn)圖片去重的3種計(jì)算方式并進(jìn)行了對(duì)比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2026-05-05
Python基于回溯法子集樹(shù)模板解決取物搭配問(wèn)題實(shí)例
這篇文章主要介紹了Python基于回溯法子集樹(shù)模板解決取物搭配問(wèn)題,簡(jiǎn)單描述了搭配問(wèn)題并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹(shù)模板解決取物搭配問(wèn)題的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-09-09

