網站首頁 編程語言 正文
背景:
今天在用matplotlib
模塊畫各城市2019-nCoV疫情確診人數和節前流入人口數的圖的時候遇到了要給圖中的點加上標簽示意,原本圖長這個樣子
現在要給各散點標注是哪個哪個城市,即下面這種圖:
matplotlib
模塊加標簽主要有matplotlib.pyplot.text()
和matplotlib.pyplot.annotate()
兩個關鍵函數,后者適用范圍更廣,今天主要談一下前者matplotlib.pyplot.text(),簡寫成plt.text() 。
準備知識:
在此重點講一下plt.text()的用法和參數設置,plt.text()函數基本語法如下:
plt.text(x, y, s, fontsize, verticalalignment,horizontalalignment,rotation , **kwargs)
其中:
- x,y表示標簽添加的位置,默認是根據坐標軸的數據來度量的,是絕對值,也就是說圖中點所在位置的對應的值,特別的,如果你要變換坐標系的話,要用到
transform=ax.transAxes
參數。 - s表示標簽的符號,字符串格式,比如你想加個“我愛三行科創”,更多的是你標注跟數據有關的主體,你如實寫便是。
-
fontsize
顧名思義就是你加標簽字體大小了,取整數。 -
verticalalignment
表示垂直對齊方式 ,可選 ‘center’ ,‘top’ , ‘bottom’,‘baseline’ 等 -
horizontalalignment
表示水平對齊方式 ,可以填 ‘center’ , ‘right’ ,‘left’ 等 -
rotation
表示標簽的旋轉角度,以逆時針計算,取整 - 后面還有 family 用來設置字體,style 設置字體的風格,weight 字體的粗細, bbox 給字體添加框,如 bbox=dict(facecolor=‘red’, alpha=0.5) 等,各種風格,應有盡有,總有一款適合你。
實例操作:
講解玩關鍵函數類plt.text()
的用法之后,我們要進行實際操作。首先,我們用下面代碼把第一張圖畫出來
import pandas as pd #導入數據分析模塊 import matplotlib.pyplot as plt #導入繪圖模塊類 plt.rcParams['font.sans-serif']=['SimHei'] #圖中文字體設置為黑體 plt.rcParams['axes.unicode_minus']=False #負值顯示 data=pd.read_excel(r"D:\城市租賃地圖\人流流動與疫情發展\百度遷徙.xlsx") #讀取數據 city_name=data['city'] #城市名稱 people_flow=data['out_people']*100 #流出人口,單位百人 confirm=data['confirm(2.10)'] #確診人數 fig=plt.figure(figsize=(8,6)) #新建畫布 ax=plt.subplot(1,1,1) #子圖初始化 ax.scatter(people_flow,confirm) #繪制散點圖 ?? ax.set_title("人口流入-確診人數") ax.set_xlabel("人口流入數(百人)") ax.set_ylabel("確診人數") plt.show()
然后再給第一個點加上標簽,只需要添加一行代碼即可:
ax.text(430, 337, "北京", fontsize=12, color = "r", style = "italic", weight = "light", verticalalignment='center', horizontalalignment='right', rotation=90)
其中430, 337就是這個點的坐標值,北京是這個點的主體,你可以不斷的去調后面的參數使其滿足你所需。
接著,我們要批量給圖中的點加上主體標簽,使其看起來像第二張圖,需要用到循環語句來控制加標簽的位置
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) #給散點加標簽
這里關鍵是里面偏移參數的設定,比如這里兩個偏移率都設置成1.01, 當初想的是標簽不要覆蓋原來的點,兩者最好不重合,看起來大方得體,你可以開始的設置成1.0,觀察效果然后慢慢調節,舉個例子,如果是柱狀圖,且寬度適合的話,第一個偏移率設置成1.0,第二個設置成1.05左右,即稍微高出柱子多一丁點顯示柱子的標簽。
完整代碼:
最后給出完整代碼,如果你不會寫代碼或者只要數據測試,百度遷徙.xlsx如下:
import pandas as pd #導入數據分析模塊 import matplotlib.pyplot as plt #導入繪圖模塊類 plt.rcParams['font.sans-serif']=['SimHei'] #圖中文字體設置為黑體 plt.rcParams['axes.unicode_minus']=False #負值顯示 data=pd.read_excel(r"D:\城市租賃地圖\人流流動與疫情發展\百度遷徙.xlsx") #讀取數據 city_name=data['city'] #城市名稱 people_flow=data['out_people']*100 #流出人口,單位百人 confirm=data['confirm(2.10)'] #確診人數 fig=plt.figure(figsize=(8,6)) #新建畫布 ax=plt.subplot(1,1,1) #子圖初始化 ax.scatter(people_flow,confirm) #繪制散點圖 ?? ax.set_title("人口流入-確診人數") ax.set_xlabel("人口流入數(百人)") ax.set_ylabel("確診人數") #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) #給散點加標簽 plt.show()
原文鏈接:https://blog.csdn.net/zengbowengood/article/details/104324293
- 上一篇:Python學習之循環方法詳解_python
- 下一篇:C#反射機制介紹_C#教程
相關推薦
- 2023-01-06 Linux下find?命令的?7?種用法_linux shell
- 2022-08-14 Python基礎教程之pip的安裝和卸載_python
- 2022-04-12 網絡編程——Http請求方式Get與Post
- 2022-10-11 Xshell連接centOS7并與CentOS7聯網_Linux
- 2022-12-28 jquery點擊獲取動態數據進行傳參問題_jquery
- 2023-06-21 Flutter學習之Navigator的高級用法分享_Android
- 2022-11-18 Oracle移動數據文件不停機和停機兩種方式詳解_oracle
- 2022-06-19 詳解Rainbond內置ServiceMesh微服務架構_云其它
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支