python | 基于geoplot重绘全国某要素分布图

文摘   2024-10-12 09:00   北京  

前言

之前使用pandas和cartopy绘制过

https://www.heywhale.com/mw/project/65b0e3448886afac92b3cb5a

来表现全国某个要素在各个省份的分布

现在我们使用geoplot库重新绘制一遍看看效果

!pip install geoplot -i https://pypi.mirrors.ustc.edu.cn/simple/


数据读取与处理


## 读取随机生成的数据
import pandas as pd
import geopandas as gpd
import numpy as np
# 读取shp文件
shp = gpd.read_file('/home/mw/input/china1656/china_map/china_map/China_Province_2022.shp')
random_nums = 1000*np.random.rand(len(shp))
# 将随机数列添加为新的列
shp['Random'] = random_nums
shp.head()



省级码省类型ENG_NAMEVAR_NAMEFIRST_GIDFIRST_TYPEyeargeometryRandom
0北京市110000直辖市BeijingBěi Jīng110000Municipality2022POLYGON ((117.38335 40.22647, 117.38557 40.224...841.927184
1天津市120000直辖市TianjinTiān Jīn120000Municipality2022POLYGON ((117.56937 40.19153, 117.56744 40.189...807.565088
2河北省130000HebeiHé Běi130000Province2022MULTIPOLYGON (((118.26945 38.98097, 118.26871 ...987.744808
3山西省140000ShanxiShān Xī140000Province2022POLYGON ((114.13714 40.73445, 114.13860 40.732...202.062701
4内蒙古自治区150000自治区NeimengguNèi Měng Gǔ150000Autonomous Region2022POLYGON ((121.49813 53.32607, 121.50116 53.321...804.195501

Choropleth Map (分级统计图)

shp.loc[shp['省'] == '广东省''Random'] = 10
import geoplot as gplt
import geoplot.crs as gcrs
import matplotlib.pyplot as plt

# 设置画布大小
plt.figure(figsize=(1610),dpi=300)  # 这里设置宽度为10英寸,高度为8英寸,你可以根据需要调整

ax = gplt.choropleth(
    shp, hue='Random', projection=gcrs.AlbersEqualArea(),
    edgecolor='black', linewidth=1,
    cmap='Blues', legend=True,
    scheme='FisherJenks',
    legend_labels=[
        '0-10''10-100''100-300',
        '300-500''>500'
    ]
)
gplt.polyplot(shp, facecolor='lightgray', edgecolor='None', ax=ax)
plt.title("全国压岁钱分布图")

# 显示图形
plt.show()
<Figure size 4800x3000 with 0 Axes>

高清版

import geopandas as gpd  
import geoplot as gplt
import geoplot.crs as gcrs
import matplotlib.pyplot as plt


# 创建一个子图
fig, ax = plt.subplots(11, figsize=(1610), dpi=300, subplot_kw={'projection': gcrs.PlateCarree()})

# 绘制填充颜色的地图
gplt.choropleth(
    shp, hue='Random',  # 'Random'是你的GeoDataFrame中的列名
    edgecolor='black', linewidth=1,
    cmap='Blues', legend=True,
    scheme='FisherJenks',
    legend_labels=['0-10''10-100''100-300''300-500''>500'],
    ax=ax  
)

# 添加灰色底色的多边形轮廓
gplt.polyplot(shp, facecolor='lightgray', edgecolor='None', ax=ax)

# 设置标题
plt.title("全国压岁钱分布图")

# 显示图形
plt.show()

cartogram(变形统计图)

import pandas as pd
import geopandas as gpd
import geoplot as gplt
import geoplot.crs as gcrs
import matplotlib.pyplot as plt
import mapclassify as mc

scheme = mc.Quantiles(shp['Random'], k=5)
ax = gplt.cartogram(
    shp,
    scale='Random', limits=(0.751),
    projection=gcrs.PlateCarree(),
    hue='Random', cmap='Reds', scheme=scheme,
    linewidth=0.5,
    legend=True, legend_kwargs={'loc''lower right'}, legend_var='hue',
    figsize=(127)
)
gplt.polyplot(shp, facecolor='lightgray', edgecolor='None', ax=ax)

plt.title("全国压岁钱分布图")
Text(0.5, 1.0, '全国压岁钱分布图')

高清版

import pandas as pd
import geopandas as gpd
import geoplot as gplt
import geoplot.crs as gcrs
import matplotlib.pyplot as plt
import mapclassify as mc

scheme = mc.Quantiles(shp['Random'], k=5)

# 设置画布大小和DPI
fig, ax = plt.subplots(11, figsize=(127), dpi=300, subplot_kw={'projection': gcrs.PlateCarree()})

# 绘制变形统计图
gplt.cartogram(
    shp,
    scale='Random', limits=(0.751),
    projection=gcrs.PlateCarree(),
    hue='Random', cmap='Reds', scheme=scheme,
    linewidth=0.5,
    legend=True, legend_kwargs={'loc''lower right'}, legend_var='hue',
    ax=ax  # 使用之前创建的ax
)

# 添加灰色底色的多边形轮廓
gplt.polyplot(shp, facecolor='lightgray', edgecolor='None', ax=ax)

# 设置标题
plt.title("全国压岁钱分布图")

# 显示图形
plt.show()


气python风雨
主要发一些涉及大气科学的Python文章与个人学习备忘录
 最新文章