日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【Python基础】解决matplotlib文字标签遮挡问题

發(fā)布時(shí)間:2025/3/8 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python基础】解决matplotlib文字标签遮挡问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文示例代碼、數(shù)據(jù)已上傳至我的Github倉(cāng)庫(kù)https://github.com/CNFeffery/DataScienceStudyNotes

1 簡(jiǎn)介

在進(jìn)行數(shù)據(jù)可視化時(shí)我們常常需要在可視化作品上進(jìn)行一些文字標(biāo)注,譬如對(duì)散點(diǎn)圖我們可以將每個(gè)散點(diǎn)對(duì)應(yīng)的屬性信息標(biāo)注在每個(gè)散點(diǎn)旁邊,但隨著散點(diǎn)量的增多,或圖像上的某個(gè)區(qū)域聚集了較多的散點(diǎn)時(shí),疊加上的文字標(biāo)注會(huì)擠在一起相互疊置,出現(xiàn)如圖1所示的情況:

圖1

出現(xiàn)這種情況非常影響數(shù)據(jù)可視化作品的呈現(xiàn)效果,而我們下面要介紹的adjustText是一個(gè)輔助matplotlib所繪制的圖像自動(dòng)調(diào)整文字位置以緩解遮擋現(xiàn)象的庫(kù),其靈感來(lái)源于R中非常著名的輔助ggplot2解決文字遮擋問(wèn)題的ggrepel:

圖2

它通過(guò)算法迭代,在一輪輪的迭代過(guò)程中逐漸消除文字遮擋現(xiàn)象:

圖3

下面我們就來(lái)學(xué)習(xí)如何使用adjustText解決matplotlib圖像文字遮擋問(wèn)題。

2 使用adjustText解決文字遮擋問(wèn)題

2.1 從一個(gè)簡(jiǎn)單的例子出發(fā)

使用pip install adjustText或conda install -c conda-forge adjusttext來(lái)安裝adjustText。安裝成功之后,首先生成隨機(jī)示例數(shù)據(jù)以方便之后的演示:

import?matplotlib.pyplot?as?plt from?adjustText?import?adjust_text import?numpy?as?np#解決中文顯示問(wèn)題 plt.rcParams['font.sans-serif']?=?['SimHei']seed?=?np.random.RandomState(42)?#?固定隨機(jī)數(shù)水平 x,?y?=?seed.uniform(0,?1,?[2,?100])?#?產(chǎn)生固定的均勻分布隨機(jī)數(shù) texts?=?[f'文字{i}'?for?i?in?range(x.__len__())]

接著我們先不使用adjustText調(diào)整圖像,直接繪制出原始的散點(diǎn)+文字標(biāo)簽

fig,?ax?=?plt.subplots(figsize=(8,?8)) ax.scatter(x,?y,?c='SeaGreen',?s=10)?#?繪制散點(diǎn)#?繪制所有點(diǎn)對(duì)應(yīng)的文字標(biāo)簽 for?x_,?y_,?text?in?zip(x,?y,?texts):plt.text(x_,?y_,?text,?fontsize=12)#?美觀起見(jiàn)隱藏頂部與右側(cè)邊框線 ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False)fig.savefig('圖4.png',?dpi=300,?bbox_inches='tight',?pad_inches=0)?#?保存圖像 圖4

可以看到,在通常的情況下,散點(diǎn)聚集的區(qū)域內(nèi)文字標(biāo)簽非常容易重疊在一起,接下來(lái)我們使用adjustText的基礎(chǔ)功能來(lái)消除文字重疊現(xiàn)象:

圖5

這時(shí)可以看到與圖4相比,圖5中的所有文字都沒(méi)有出現(xiàn)彼此重疊現(xiàn)象,adjustText幫助我們自動(dòng)微調(diào)了文字的擺放位置,并且距離原始散點(diǎn)偏移較大的文字還貼心的加上了連接線,至此,我們就初探了adjustText的強(qiáng)大功能,接下來(lái)我們來(lái)學(xué)習(xí)adjustText的更多功能。

2.2 adjust_text的用法

adjustText中的核心功能都通過(guò)調(diào)用函數(shù)adjust_text來(lái)實(shí)現(xiàn),其核心參數(shù)如下:

texts:List型,每個(gè)元素都是表示單個(gè)文字標(biāo)簽對(duì)應(yīng)的matplotlib.text.Text對(duì)象

ax:繪制文字標(biāo)簽的目標(biāo)axe對(duì)象,默認(rèn)為最近一次的axe對(duì)象

lim:int型,控制迭代調(diào)整文本標(biāo)簽位置的次數(shù),默認(rèn)為500次

precision:float型,用于決定迭代停止的精度,默認(rèn)為0.01,即所有標(biāo)簽相互遮擋部分的長(zhǎng)和寬占所有標(biāo)簽自身長(zhǎng)寬之和的比例,addjust_text會(huì)在精度達(dá)到precision和迭代次數(shù)超過(guò)lim這兩個(gè)條件中至少有一個(gè)滿足時(shí)停止迭代

only_move:字典型,用于指定文本標(biāo)簽與不同對(duì)象發(fā)生遮擋時(shí)的位移策略,鍵有'points'、'text'和'objects',對(duì)應(yīng)的值可選'xy'、'x'、'y',分別代表豎直和水平方向均調(diào)整、只調(diào)整水平方向以及只調(diào)整豎直方向

arrowprops:字典型,用于設(shè)置偏移后的文字標(biāo)簽與原始位置之間的連線樣式,下文會(huì)作具體演示

save_steps:bool型,用于決定是否保存記錄迭代過(guò)程中各輪的幀圖像,默認(rèn)為False

save_prefix:str型,當(dāng)save_steps設(shè)置為True時(shí),用于指定中間幀保存的路徑,默認(rèn)為'',即當(dāng)前工作路徑

下面我們來(lái)演示一下這些參數(shù)的使用效果,首先我們來(lái)看看only_move參數(shù)的效果,在圖6的基礎(chǔ)上,我們?cè)O(shè)置only_move={'text': 'x'},即當(dāng)文字出現(xiàn)遮擋時(shí),只在水平方向上進(jìn)行偏移,這里將save_steps設(shè)置為True以直觀地查看偏移過(guò)程:

fig,?ax?=?plt.subplots(figsize=(8,?8)) ax.scatter(x,?y,?c='SeaGreen',?s=10)?#?繪制散點(diǎn)#?使用adjustText修正文字重疊現(xiàn)象 new_texts?=?[plt.text(x_,?y_,?text,?fontsize=12)?for?x_,?y_,?text?in?zip(x,?y,?texts)] adjust_text(new_texts,?only_move={'text':?'x'},arrowprops=dict(arrowstyle='-',?color='grey'),save_steps=True)#?美觀起見(jiàn)隱藏頂部與右側(cè)邊框線 ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) 圖6

可以看到在整個(gè)迭代微調(diào)的過(guò)程中,每個(gè)標(biāo)簽只在水平方向發(fā)生位移,你可以根據(jù)自己作圖的實(shí)際需要靈活調(diào)整這里的平移策略。接下來(lái)我們來(lái)看看arrowprops對(duì)可視化結(jié)果的影響,在之前的例子里我們?cè)O(shè)置了arrowprops={arrowstyle='-', color='grey'},其中arrowstyle用于設(shè)定連線的線型,color不用多說(shuō),接下來(lái)我們添加參數(shù)lw用于控制線的寬度,并對(duì)線型與顏色進(jìn)行修改:

fig,?ax?=?plt.subplots(figsize=(8,?8)) ax.scatter(x,?y,?c='SeaGreen',?s=10)?#?繪制散點(diǎn)#?使用adjustText修正文字重疊現(xiàn)象 new_texts?=?[plt.text(x_,?y_,?text,?fontsize=12)?for?x_,?y_,?text?in?zip(x,?y,?texts)] adjust_text(new_texts,?arrowprops=dict(arrowstyle='->',?color='red',lw=1))#?美觀起見(jiàn)隱藏頂部與右側(cè)邊框線 ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False)fig.savefig('圖7.png',?dpi=300,?bbox_inches='tight',?pad_inches=0)?#?保存圖像

這時(shí)連線隨著我們自定義的設(shè)置改變到相應(yīng)的樣式:

圖7

有關(guān)adjustText的更多參數(shù)設(shè)置信息和示例可以去官方文檔(https://adjusttext.readthedocs.io/en/latest/ )查看。

以上就是本文的全部?jī)?nèi)容,如有疑問(wèn)歡迎在評(píng)論區(qū)與我們討論。

-END-

往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi):https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請(qǐng)掃碼進(jìn)群:

總結(jié)

以上是生活随笔為你收集整理的【Python基础】解决matplotlib文字标签遮挡问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。