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 科學繪圖字體設置
近期文章定稿,在確認最終版的插圖時,被導師指出來很多沒注意到的細節(jié),其中印象最深的怕就是上下標的字體了,因為一開始用的是 Latex 的公式編譯,所以沒有注意到上下標的問題,結果在導師指出之后,才發(fā)現所有的上下標的字號都是有問題的,果然啊,大佬的一句指點對我們這些小菜雞來說,就是一個質的提升啊。
借記錄上下標的字體設置,將 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" # 設置公式的字體和其他字體統(tǒng)一 font_options = {"family":"Arial","size":16} fig = plt.figure(figsize=(5,3.8),dpi=540) # mpl 使用 inch 作為畫布大小的單位,1 inch = 2.54 cm, # 為了標準規(guī)范的繪圖輸出,建議直接設置畫布大小為 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 更新 最近發(fā)現一個更花的玩法,記錄一下 plt.xticks([0,0.5,1],[0,0.5,1],fontdict=font_options) 這句代碼會把plt.xticks變?yōu)閜lt.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()
最后吐槽一句,果然圖還是要經過精心排版,就這副草圖,從長寬比例到顏色搭配再到文字距離啥的,滿滿的無不是槽點,太難看了。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python使用OpenCV和K-Means聚類對畢業(yè)照進行圖像分割
圖像分割是將圖像分割成多個不同區(qū)域(或片段)的過程。目標是將圖像的表示變成更容易和更有意義的圖像。在這篇博客中,我們詳細的介紹了使用方法,感興趣的可以了解一下2021-06-06Python Dataframe 指定多列去重、求差集的方法
今天小編就為大家分享一篇Python Dataframe 指定多列去重、求差集的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07