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

相关文章

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib