GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全)

本文主要是介绍GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全)

  • 一、概要
  • 二、整体架构流程
  • 三、完整代码

一、概要

  这段代码是使用GeoPandasMatplotlib库在Python中绘制世界地图的一个例子,它突出了与中国建交的国家(部分)。首先,它创建了一个包含建交国家名称的字典,然后使用GeoPandas库读取了世界地图数据。通过筛选地图数据,它找出了这些特定国家的地理位置信息。

  然后,代码创建了一个新的图形对象,并在这个图形上绘制了整个世界的地图,所有国家的颜色都是淡灰色的线条。然后,它再次绘制了与我国建交的国家的地图,这次的颜色是绿色,线条是黑色的。然后,它特别将中国的地图设置为红色,以突出显示。

  接下来,代码在每个国家的中心位置添加了一个标签,以显示其名称。最后,它将中文字体设置为正常显示,并设置了图形和轴标签的字体大小。这样创建的图形可以直观地展示出与中国建交的国家在全球的分布情况。

  如下图,显示绿色的为与中国建交的国家,还有部分国家如刚果民主共和国等在GeoPandas中没有找到相应的英文名。

  另外,有16个国家未与中国建交,名单如下:亚洲(1个):不丹;欧洲(1个):梵蒂冈;非洲(1个):斯威士兰;大洋洲(4个):图瓦卢、马绍尔群岛、帕劳、瑙鲁;北美洲(8个):危地马拉、伯利兹、洪都拉斯、尼加拉瓜、海地、圣基茨和尼维斯、圣卢西亚、圣文森特和格林纳丁斯;南美洲(1个):巴拉圭。
在这里插入图片描述

  另外,有一件令人恼火的事,就是geopandas的中国版图竟然没有包括台湾,所以增加了一段代码,将台湾纳入中国版图:

# 中国单独设置为绿色
china = world[world['name'].isin(['China', 'Taiwan'])]
china.plot(ax=ax, color='red', edgecolor='black')
再次申明:台湾是中国神圣不可分割的领土,坚决捍卫国家主权和领土完整!

二、整体架构流程

  这段代码的整体架构是一个使用GeoPandasMatplotlib库进行地理数据可视化的流程。以下是这段代码的详细整体架构解释:

  1. 导入所需的库:该代码首先导入了geopandas库和matplotlib.pyplot库。Geopandas是一个开源的Python库,用于更轻松地处理地理空间数据,而matplotlib.pyplot是Python的一个绘图库,用于创建各种类型的图形。
  2. 定义与我国建交的国家:为了筛选出与我国建交的国家,代码中定义了一个字典,其中包含这些国家的名称和对应的英文名称。
  3. 读取世界地图数据:使用geopandasread_file方法读取了名为“naturalearth_lowres”的内置世界地图数据。
  4. 创建国家名称列表:通过遍历字典,将字典中的值提取出来并存储为一个列表。
  5. 根据国家名称筛选地图数据:通过使用geopandasdf[df['name'].isin(country_name_list)]操作,从读取的世界地图数据中筛选出与我国建交的国家的地理数据。
  6. 创建图形对象:使用matplotlibsubplots方法创建一个图形和子图对象。
  7. 在地图上绘制所有国家:通过调用world.plot方法,并在图形对象上绘制所有国家。颜色设置为浅灰色,边框为灰色。
  8. 在地图上绘制指定国家(绿色):调用countries.plot方法在图形对象上绘制与我国建交的国家,并设置颜色为绿色,边框为黑色。
  9. 中国单独设置为红色:通过调用china.plot方法,将中国的图形绘制为红色,边框为黑色。
  10. 添加标题和轴标签:使用ax对象的set_titleset_xlabelset_ylabel方法添加图形标题和轴标签。
  11. 在地图上显示国家名称:通过循环遍历所有国家的行数据,并使用ax对象的annotate方法在每个国家的中心位置添加其名称。
  12. 设置中文字体及大小:为了正确显示中文标签,设置matplotlib的全局参数rcParams中的’font.sans-serif’为’SimHei’,并将字体大小设置为12
  13. 显示图形:最后,使用plt.show()方法显示所创建的图形。
  14. 与中国建交的国家提取参考这篇文章:提取多个txt数据并合成excel——例子:与中国建交的国家

三、完整代码

1.先安装GeoPandas。在终端或命令提示符中运行以下命令:

pip install geopandas

2.完整代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023-09-23 16:54
# @Author : Leuanghing Chen
# @Blog : https://blog.csdn.net/weixin_46153372?spm=1010.2135.3001.5421
# @File : geopandas地图高亮显示.py
# @Software : PyCharm# country_CHname_list = ['阿富汗', '亚美尼亚', '阿塞拜疆', '巴林', '孟加拉国', '文莱', '柬埔寨', '朝鲜', '东帝汶', '格鲁吉亚', '印度', '印度尼西亚', '伊朗', '伊拉克', '以色列', '日本', '约旦', '哈萨克斯坦', '科威特', '吉尔吉斯斯坦', '老挝', '黎巴嫩', '马来西亚', '马尔代夫', '蒙古', '缅甸', '尼泊尔', '阿曼', '巴基斯坦', '巴勒斯坦', '菲律宾', '卡塔尔', '韩国', '沙特阿拉伯', '新加坡', '斯里兰卡', '叙利亚', '塔吉克斯坦', '泰国', '土耳其', '土库曼斯坦', '阿拉伯联合酋长国', '乌兹别克斯坦', '越南', '也门', '澳大利亚', '库克群岛', '斐济', '基里巴斯', '密克罗尼西亚', '新西兰', '纽埃', '巴布亚新几内亚', '萨摩亚', '所罗门群岛', '汤加', '瓦努阿图', '阿尔巴尼亚', '安道尔', '奥地利', '白俄罗斯', '比利时', '波斯尼亚和黑塞哥维那', '保加利亚', '克罗地亚', '塞浦路斯', '捷克', '丹麦', '爱沙尼亚', '芬兰', '法国', '德国', '希腊', '匈牙利', '冰岛', '爱尔兰', '意大利', '拉脱维亚', '列支敦士登', '立陶宛', '卢森堡', '马耳他', '摩尔多瓦', '摩纳哥', '黑山', '荷兰', '北马其顿', '挪威', '波兰', '葡萄牙', '罗马尼亚', '俄罗斯', '圣马力诺', '塞尔维亚', '斯洛伐克', '斯洛文尼亚', '西班牙', '瑞典', '瑞士', '乌克兰', '英国', '阿尔及利亚', '安哥拉', '贝宁', '博茨瓦纳', '布基纳法索', '布隆迪', '喀麦隆', '佛得角', '中非', '乍得', '科摩罗', '刚果(金)', '刚果(布)', '科特迪瓦', '吉布提', '埃及', '赤道几内亚', '厄立特里亚', '埃塞俄比亚', '加蓬', '冈比亚', '加纳', '几内亚', '几内亚比绍', '肯尼亚', '莱索托', '利比里亚', '利比亚', '马达加斯加', '马拉维', '马里', '毛里塔尼亚', '毛里求斯', '摩洛哥', '莫桑比克', '纳米比亚', '尼日尔', '尼日利亚', '卢旺达', '圣多美和普林西比', '塞内加尔', '塞舌尔', '塞拉利昂', '索马里', '南非', '南苏丹', '苏丹', '坦桑尼亚', '多哥', '突尼斯', '乌干达', '赞比亚', '津巴布韦', '安提瓜和巴布达', '阿根廷', '巴哈马', '巴巴多斯', '玻利维亚', '巴西', '加拿大', '智利', '哥伦比亚', '哥斯达黎加', '古巴', '多米尼克', '多米尼加', '厄瓜多尔', '萨尔瓦多', '格林纳达', '圭亚那', '牙买加', '墨西哥', '尼加拉瓜', '巴拿马', '秘鲁', '苏里南', '特立尼达和多巴哥', '美国', '乌拉圭', '委内瑞拉']
# country_ENname_list = ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bahrain', 'Bangladesh', 'Brunei', 'Cambodia', 'North Korea', 'Timor-Leste', 'Georgia', 'India', 'Indonesia', 'Iran', 'Iraq', 'Israel', 'Japan', 'Jordan', 'Kazakhstan', 'Kuwait', 'Kyrgyzstan', 'Laos', 'Lebanon', 'Malaysia', 'Maldives', 'Mongolia', 'Myanmar', 'Nepal', 'Oman', 'Pakistan', 'Palestine', 'the Philippines', 'Qatar', 'Korea', 'Saudi Arabia', 'Singapore', 'Sri Lanka', 'Syria', 'Tajikistan', 'Thailand', 'Türkiye', 'Turkmenistan', 'The United Arab Emirates', 'Uzbekistan', 'Vietnam', 'Yemen', 'Australia', 'Cook Islands', 'Fiji', 'Kiribati', 'Micronesia', 'New Zealand', 'Niue', 'papua new guinea', 'Samoa', 'Solomon Islands', 'Tonga', 'Vanuatu', 'Albania', 'Andorra', 'Austria', 'Belarus', 'Belgium', 'Bosnia and Herzegovina', 'Bulgaria', 'Croatia', 'Cyprus', 'Czech Republic', 'Denmark', 'Estonia', 'Finland', 'France', 'Germany', 'Greece', 'Hungary', 'Iceland', 'Ireland', 'Italy', 'Latvia', 'Liechtenstein', 'Lithuania', 'Luxembourg', 'Malta', 'Moldova', 'Monaco', 'Montenegro', 'Netherlands', 'Northern Macedonia', 'Norway', 'poland', 'Portugal', 'Romania', 'Russia', 'San Marino', 'Serbia', 'Slovakia', 'Slovenia', 'Spain', 'Sweden', 'Switzerland', 'Ukraine', 'Britain', 'Algeria', 'Angola', 'Benin', 'Botswana', 'burkina faso', 'Burundi', 'Cameroon', 'Cape Verde', 'Central African', 'Chad', 'Comoros', 'Congo (Kinshasa)', 'Congo (Brazzaville)', 'Ivory Coast', 'Djibouti', 'Egypt', 'Equatorial Guinea', 'Eritrea', 'Ethiopia', 'Gabon', 'Gambia', 'Ghana', 'Guinea', 'Guinea-Bissau', 'Kenya', 'Lesotho', 'Liberia', 'Libya', 'Madagascar', 'Malawi', 'Mali', 'Mauritania', 'Mauritius', 'Morocco', 'Mozambique', 'Namibia', 'Niger', 'Nigeria', 'Rwanda', 'Sao Tome and Principe', 'Senegal', 'Seychelles', 'sierra leone', 'Somalia', 'South Africa', 'South Sudan', 'Sudan', 'Tanzania', 'Togo', 'Tunisia', 'Uganda', 'Zambia', 'zimbabwe', 'Antigua and Barbuda', 'Argentina', 'Bahamas', 'Barbados', 'bolivia', 'Brazil', 'Canada', 'Chile', 'Colombia', 'Costa Rica', 'Cuba', 'Dominica', 'Dominican', 'Ecuador', 'El Salvador', 'Grenada', 'Guyana', 'Jamaica', 'Mexico', 'Nicaragua', 'Panama', 'Peru', 'Suriname', 'Trinidad and Tobago', 'United States', 'Uruguay', 'Venezuela']import geopandas as gpd
import matplotlib.pyplot as plt# 与中国建交的国家
country_dict={'阿富汗': 'Afghanistan', '亚美尼亚': 'Armenia', '阿塞拜疆': 'Azerbaijan', '巴林': 'Bahrain', '孟加拉国': 'Bangladesh','文莱': 'Brunei', '柬埔寨': 'Cambodia', '朝鲜': 'North Korea', '东帝汶': 'Timor-Leste', '格鲁吉亚': 'Georgia','印度': 'India', '印度尼西亚': 'Indonesia', '伊朗': 'Iran', '伊拉克': 'Iraq', '以色列': 'Israel', '日本': 'Japan','约旦': 'Jordan', '哈萨克斯坦': 'Kazakhstan', '科威特': 'Kuwait', '吉尔吉斯斯坦': 'Kyrgyzstan', '老挝': 'Laos','黎巴嫩': 'Lebanon', '马来西亚': 'Malaysia', '马尔代夫': 'Maldives', '蒙古': 'Mongolia', '缅甸': 'Myanmar','尼泊尔': 'Nepal', '阿曼': 'Oman', '巴基斯坦': 'Pakistan', '巴勒斯坦': 'Palestine', '菲律宾': 'Philippines','卡塔尔': 'Qatar', '韩国': 'South Korea', '沙特阿拉伯': 'Saudi Arabia', '新加坡': 'Singapore', '斯里兰卡': 'Sri Lanka','叙利亚': 'Syria', '塔吉克斯坦': 'Tajikistan', '泰国': 'Thailand', '土耳其': 'Turkey', '土库曼斯坦': 'Turkmenistan','阿拉伯联合酋长国': 'The United Arab Emirates', '乌兹别克斯坦': 'Uzbekistan', '越南': 'Vietnam', '也门': 'Yemen','澳大利亚': 'Australia', '库克群岛': 'Cook Islands', '斐济': 'Fiji', '基里巴斯': 'Kiribati', '密克罗尼西亚': 'Micronesia','新西兰': 'New Zealand', '纽埃': 'Niue', '巴布亚新几内亚': 'Papua New Guinea', '萨摩亚': 'Samoa','所罗门群岛': 'Solomon Islands', '汤加': 'Tonga', '瓦努阿图': 'Vanuatu', '阿尔巴尼亚': 'Albania', '安道尔': 'Andorra','奥地利': 'Austria', '白俄罗斯': 'Belarus', '比利时': 'Belgium', '波斯尼亚和黑塞哥维那': 'Bosnia and Herzegovina','保加利亚': 'Bulgaria', '克罗地亚': 'Croatia', '塞浦路斯': 'Cyprus', '捷克': 'Czech Republic', '丹麦': 'Denmark','爱沙尼亚': 'Estonia', '芬兰': 'Finland', '法国': 'France', '德国': 'Germany', '希腊': 'Greece', '匈牙利': 'Hungary','冰岛': 'Iceland', '爱尔兰': 'Ireland', '意大利': 'Italy', '拉脱维亚': 'Latvia', '列支敦士登': 'Liechtenstein','立陶宛': 'Lithuania', '卢森堡': 'Luxembourg', '马耳他': 'Malta', '摩尔多瓦': 'Moldova', '摩纳哥': 'Monaco','黑山': 'Montenegro', '荷兰': 'Netherlands', '北马其顿': 'Northern Macedonia', '挪威': 'Norway', '波兰': 'Poland','葡萄牙': 'Portugal', '罗马尼亚': 'Romania', '俄罗斯': 'Russia', '圣马力诺': 'San Marino', '塞尔维亚': 'Serbia','斯洛伐克': 'Slovakia', '斯洛文尼亚': 'Slovenia', '西班牙': 'Spain', '瑞典': 'Sweden', '瑞士': 'Switzerland','乌克兰': 'Ukraine', '英国': 'United Kingdom', '阿尔及利亚': 'Algeria', '安哥拉': 'Angola', '贝宁': 'Benin','博茨瓦纳': 'Botswana', '布基纳法索': 'Burkina Faso', '布隆迪': 'Burundi', '喀麦隆': 'Cameroon', '佛得角': 'Cape Verde','中非': 'Central African', '乍得': 'Chad', '科摩罗': 'Comoros', '刚果': 'Congo','刚果(布)': 'Congo (Brazzaville)', '科特迪瓦': 'Ivory Coast', '吉布提': 'Djibouti', '埃及': 'Egypt','赤道几内亚': 'Equatorial Guinea', '厄立特里亚': 'Eritrea', '埃塞俄比亚': 'Ethiopia', '加蓬': 'Gabon','冈比亚': 'Gambia', '加纳': 'Ghana', '几内亚': 'Guinea', '几内亚比绍': 'Guinea-Bissau', '肯尼亚': 'Kenya','莱索托': 'Lesotho', '利比里亚': 'Liberia', '利比亚': 'Libya', '马达加斯加': 'Madagascar', '马拉维': 'Malawi','马里': 'Mali', '毛里塔尼亚': 'Mauritania', '毛里求斯': 'Mauritius', '摩洛哥': 'Morocco', '莫桑比克': 'Mozambique','纳米比亚': 'Namibia', '尼日尔': 'Niger', '尼日利亚': 'Nigeria', '卢旺达': 'Rwanda','圣多美和普林西比': 'Sao Tome and Principe', '塞内加尔': 'Senegal', '塞舌尔': 'Seychelles', '塞拉利昂': 'Sierra Leone','索马里': 'Somalia', '南非': 'South Africa', '南苏丹': 'South Sudan', '苏丹': 'Sudan', '坦桑尼亚': 'Tanzania','多哥': 'Togo', '突尼斯': 'Tunisia', '乌干达': 'Uganda', '赞比亚': 'Zambia', '津巴布韦': 'Zimbabwe','安提瓜和巴布达': 'Antigua and Barbuda', '阿根廷': 'Argentina', '巴哈马': 'Bahamas', '巴巴多斯': 'Barbados','玻利维亚': 'bolivia', '巴西': 'Brazil', '加拿大': 'Canada', '智利': 'Chile', '哥伦比亚': 'Colombia','哥斯达黎加': 'Costa Rica', '古巴': 'Cuba', '多米尼克': 'Dominica', '多米尼加': 'Dominican', '厄瓜多尔': 'Ecuador','萨尔瓦多': 'El Salvador', '格林纳达': 'Grenada', '圭亚那': 'Guyana', '牙买加': 'Jamaica', '墨西哥': 'Mexico','尼加拉瓜': 'Nicaragua', '巴拿马': 'Panama', '秘鲁': 'Peru', '苏里南': 'Suriname','特立尼达和多巴哥': 'Trinidad and Tobago', '美国': 'United States of America', '乌拉圭': 'Uruguay', '委内瑞拉': 'Venezuela'}# 读取世界地图数据
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))# 指定要高亮显示的国家名称列表  提取字典中的值并存储为列表
country_name_list = list(country_dict.values())# 根据国家名称筛选地图数据
countries = world[world['name'].isin(country_name_list)]# 创建一个新的图形对象
fig, ax = plt.subplots()# 在地图上绘制所有国家
world.plot(ax=ax, color='lightgray', edgecolor='gray')# 在地图上绘制指定国家,并设置高亮颜色
countries.plot(ax=ax, color='green', edgecolor='black')# 中国单独设置为红色
china = world[world['name'].isin(['China', 'Taiwan'])]
china.plot(ax=ax, color='red', edgecolor='black')# 添加标题和轴标签
ax.set_title('与中国建交的国家')
ax.set_xlabel('经度')
ax.set_ylabel('纬度')# 在地图上显示国家名称
for idx, row in world[world['name'].isin(country_name_list+['China'])].iterrows():ax.annotate(row['name'], (row['geometry'].centroid.x, row['geometry'].centroid.y), ha='center', va='center',fontsize=8, color='black')# 设置中文字体及大小
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['font.size'] = 12  # 设置字体大小# 显示图形
plt.show()

这篇关于GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/339917

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展

【科技明说 | 科技热点关注】 2024戴尔科技峰会在8月如期举行,虽然因事未能抵达现场参加,我只是观看了网上在线直播,也未能采访到DTF现场重要与会者,但是通过数十年对戴尔的跟踪与观察,我觉得2024戴尔科技峰会给业界传递了6大重要信号。不妨简单聊聊:从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展? 1)退出中国的谣言不攻自破。 之前有不良媒体宣扬戴尔将退出中国的谣言,随着2

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

C# dateTimePicker 显示年月日,时分秒

dateTimePicker默认只显示日期,如果需要显示年月日,时分秒,只需要以下两步: 1.dateTimePicker1.Format = DateTimePickerFormat.Time 2.dateTimePicker1.CustomFormat = yyyy-MM-dd HH:mm:ss Tips:  a. dateTimePicker1.ShowUpDown = t

小程序button控件上下边框的显示和隐藏

问题 想使用button自带的loading图标功能,但又不需要button显示边框线 button控件有一条淡灰色的边框,在控件上了样式 border:none; 无法让button边框隐藏 代码如下: <button class="btn">.btn{border:none; /*一般使用这个就是可以去掉边框了*/} 解决方案 发现button控件有一个伪元素(::after