背景:
今天在用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()
到此这篇关于python画图时给图中的点加标签和plt.text的使用的文章就介绍到这了,更多相关python给图中点加标签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
下一篇:Python面向对象中的封装详情
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?