python畫(huà)圖時(shí)給圖中的點(diǎn)加標(biāo)簽和plt.text的使用
背景:
今天在用matplotlib
模塊畫(huà)各城市2019-nCoV疫情確診人數(shù)和節(jié)前流入人口數(shù)的圖的時(shí)候遇到了要給圖中的點(diǎn)加上標(biāo)簽示意,原本圖長(zhǎng)這個(gè)樣子
現(xiàn)在要給各散點(diǎn)標(biāo)注是哪個(gè)哪個(gè)城市,即下面這種圖:
matplotlib
模塊加標(biāo)簽主要有matplotlib.pyplot.text()
和matplotlib.pyplot.annotate()
兩個(gè)關(guān)鍵函數(shù),后者適用范圍更廣,今天主要談一下前者matplotlib.pyplot.text(),簡(jiǎn)寫(xiě)成plt.text() 。
準(zhǔn)備知識(shí):
在此重點(diǎn)講一下plt.text()的用法和參數(shù)設(shè)置,plt.text()函數(shù)基本語(yǔ)法如下:
plt.text(x, y, s, fontsize, verticalalignment,horizontalalignment,rotation , **kwargs)
其中:
- x,y表示標(biāo)簽添加的位置,默認(rèn)是根據(jù)坐標(biāo)軸的數(shù)據(jù)來(lái)度量的,是絕對(duì)值,也就是說(shuō)圖中點(diǎn)所在位置的對(duì)應(yīng)的值,特別的,如果你要變換坐標(biāo)系的話,要用到
transform=ax.transAxes
參數(shù)。 - s表示標(biāo)簽的符號(hào),字符串格式,比如你想加個(gè)“我愛(ài)三行科創(chuàng)”,更多的是你標(biāo)注跟數(shù)據(jù)有關(guān)的主體,你如實(shí)寫(xiě)便是。
fontsize
顧名思義就是你加標(biāo)簽字體大小了,取整數(shù)。verticalalignment
表示垂直對(duì)齊方式 ,可選 ‘center’ ,‘top’ , ‘bottom’,‘baseline’ 等horizontalalignment
表示水平對(duì)齊方式 ,可以填 ‘center’ , ‘right’ ,‘left’ 等rotation
表示標(biāo)簽的旋轉(zhuǎn)角度,以逆時(shí)針計(jì)算,取整- 后面還有 family 用來(lái)設(shè)置字體,style 設(shè)置字體的風(fēng)格,weight 字體的粗細(xì), bbox 給字體添加框,如 bbox=dict(facecolor=‘red’, alpha=0.5) 等,各種風(fēng)格,應(yīng)有盡有,總有一款適合你。
實(shí)例操作:
講解玩關(guān)鍵函數(shù)類plt.text()
的用法之后,我們要進(jìn)行實(shí)際操作。首先,我們用下面代碼把第一張圖畫(huà)出來(lái)
import pandas as pd #導(dǎo)入數(shù)據(jù)分析模塊 import matplotlib.pyplot as plt #導(dǎo)入繪圖模塊類 plt.rcParams['font.sans-serif']=['SimHei'] #圖中文字體設(shè)置為黑體 plt.rcParams['axes.unicode_minus']=False #負(fù)值顯示 data=pd.read_excel(r"D:\城市租賃地圖\人流流動(dòng)與疫情發(fā)展\百度遷徙.xlsx") #讀取數(shù)據(jù) city_name=data['city'] #城市名稱 people_flow=data['out_people']*100 #流出人口,單位百人 confirm=data['confirm(2.10)'] #確診人數(shù) fig=plt.figure(figsize=(8,6)) #新建畫(huà)布 ax=plt.subplot(1,1,1) #子圖初始化 ax.scatter(people_flow,confirm) #繪制散點(diǎn)圖 ?? ax.set_title("人口流入-確診人數(shù)") ax.set_xlabel("人口流入數(shù)(百人)") ax.set_ylabel("確診人數(shù)") plt.show()
然后再給第一個(gè)點(diǎn)加上標(biāo)簽,只需要添加一行代碼即可:
ax.text(430, 337, "北京", fontsize=12, color = "r", style = "italic", weight = "light", verticalalignment='center', horizontalalignment='right', rotation=90)
其中430, 337就是這個(gè)點(diǎn)的坐標(biāo)值,北京是這個(gè)點(diǎn)的主體,你可以不斷的去調(diào)后面的參數(shù)使其滿足你所需。
接著,我們要批量給圖中的點(diǎn)加上主體標(biāo)簽,使其看起來(lái)像第二張圖,需要用到循環(huán)語(yǔ)句來(lái)控制加標(biāo)簽的位置
for i in range(len(confirm)): ? ? ax.text(people_flow[i]*1.01, confirm[i]*1.01, city_name[i], fontsize=10, color = "r", style = "italic", weight = "light", verticalalignment='center', horizontalalignment='right',rotation=0) #給散點(diǎn)加標(biāo)簽
這里關(guān)鍵是里面偏移參數(shù)的設(shè)定,比如這里兩個(gè)偏移率都設(shè)置成1.01, 當(dāng)初想的是標(biāo)簽不要覆蓋原來(lái)的點(diǎn),兩者最好不重合,看起來(lái)大方得體,你可以開(kāi)始的設(shè)置成1.0,觀察效果然后慢慢調(diào)節(jié),舉個(gè)例子,如果是柱狀圖,且寬度適合的話,第一個(gè)偏移率設(shè)置成1.0,第二個(gè)設(shè)置成1.05左右,即稍微高出柱子多一丁點(diǎn)顯示柱子的標(biāo)簽。
完整代碼:
最后給出完整代碼,如果你不會(huì)寫(xiě)代碼或者只要數(shù)據(jù)測(cè)試,百度遷徙.xlsx如下:
import pandas as pd #導(dǎo)入數(shù)據(jù)分析模塊 import matplotlib.pyplot as plt #導(dǎo)入繪圖模塊類 plt.rcParams['font.sans-serif']=['SimHei'] #圖中文字體設(shè)置為黑體 plt.rcParams['axes.unicode_minus']=False #負(fù)值顯示 data=pd.read_excel(r"D:\城市租賃地圖\人流流動(dòng)與疫情發(fā)展\百度遷徙.xlsx") #讀取數(shù)據(jù) city_name=data['city'] #城市名稱 people_flow=data['out_people']*100 #流出人口,單位百人 confirm=data['confirm(2.10)'] #確診人數(shù) fig=plt.figure(figsize=(8,6)) #新建畫(huà)布 ax=plt.subplot(1,1,1) #子圖初始化 ax.scatter(people_flow,confirm) #繪制散點(diǎn)圖 ?? ax.set_title("人口流入-確診人數(shù)") ax.set_xlabel("人口流入數(shù)(百人)") ax.set_ylabel("確診人數(shù)") #ax.text(430, 337, "北京", fontsize=12, color = "r", style = "italic", weight = "light", verticalalignment='center', horizontalalignment='right',rotation=90) for i in range(len(confirm)): ? ? ax.text(people_flow[i]*1.01, confirm[i]*1.01, city_name[i],? ? ? ? ? ? ? fontsize=10, color = "r", style = "italic", weight = "light", ? ? ? ? ? ? verticalalignment='center', horizontalalignment='right',rotation=0) #給散點(diǎn)加標(biāo)簽 plt.show()
到此這篇關(guān)于python畫(huà)圖時(shí)給圖中的點(diǎn)加標(biāo)簽和plt.text的使用的文章就介紹到這了,更多相關(guān)python給圖中點(diǎn)加標(biāo)簽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python多線程操作之互斥鎖、遞歸鎖、信號(hào)量、事件實(shí)例詳解
這篇文章主要介紹了Python多線程操作之互斥鎖、遞歸鎖、信號(hào)量、事件,結(jié)合實(shí)例形式詳細(xì)分析了Python多線程操作互斥鎖、遞歸鎖、信號(hào)量、事件相關(guān)概念、原理、用法與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03python單例模式的應(yīng)用場(chǎng)景實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于python單例模式的應(yīng)用場(chǎng)景實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-02-02Python數(shù)據(jù)結(jié)構(gòu)之順序表的實(shí)現(xiàn)代碼示例
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)之順序表的實(shí)現(xiàn)代碼示例,簡(jiǎn)單介紹了順序表的相關(guān)內(nèi)容,然后分享了其代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11python通過(guò)對(duì)字典的排序,對(duì)json字段進(jìn)行排序的實(shí)例
今天小編就為大家分享一篇python通過(guò)對(duì)字典的排序,對(duì)json字段進(jìn)行排序的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Python實(shí)現(xiàn)對(duì)字典分別按鍵(key)和值(value)進(jìn)行排序的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)對(duì)字典分別按鍵(key)和值(value)進(jìn)行排序的方法,結(jié)合實(shí)例形式分析了Python基于sorted函數(shù)及operator庫(kù)進(jìn)行字典排序的相關(guān)操作技巧,需要的朋友可以參考下2018-12-12Python實(shí)現(xiàn)九宮格式的朋友圈功能內(nèi)附“馬云”朋友圈
PIL(Python Imaging Library)是一個(gè)非常強(qiáng)大的Python庫(kù),但是它支持Python2.X, 在Python3中則使用的是Pillow庫(kù),它是從PIL中fork出來(lái)的一個(gè)分支。這篇文章主要介紹了用Python搞定九宮格式的朋友圈功能內(nèi)附“馬云”朋友圈 ,需要的朋友可以參考下2019-05-05Python ORM框架SQLAlchemy學(xué)習(xí)筆記之映射類使用實(shí)例和Session會(huì)話介紹
這篇文章主要介紹了Python ORM框架SQLAlchemy學(xué)習(xí)筆記之映射類使用實(shí)例和Session會(huì)話介紹,需要的朋友可以參考下2014-06-06總結(jié)分析python數(shù)據(jù)化運(yùn)營(yíng)關(guān)聯(lián)規(guī)則
本文內(nèi)容主要介紹了python數(shù)據(jù)化運(yùn)營(yíng)中關(guān)聯(lián)規(guī)則的一般應(yīng)用場(chǎng)景,以及關(guān)聯(lián)規(guī)則的實(shí)現(xiàn),并例舉了適應(yīng)的應(yīng)用示例,方便大家更直觀的理解應(yīng)用2021-08-08