gpt4 book ai didi

python - matplotlib geopandas 绘制 choropleth,并设置颜色方案的 bin

转载 作者:行者123 更新时间:2023-12-01 00:49:25 31 4
gpt4 key购买 nike

如何为同一图中的三个设置一致的颜色方案?

以下应该是一个完全可重现的示例,用于运行代码并获得与我在下面发布的相同的数字。

Office for National Statistics 获取 shapefile 数据。在终端中将其作为 bash 文件/命令运行。

wget --output-document 'LA_authorities_boundaries.zip' 'https://opendata.arcgis.com/datasets/8edafbe3276d4b56aec60991cbddda50_1.zip?outSR=%7B%22latestWkid%22%3A27700%2C%22wkid%22%3A27700%7D&session=850489311.1553456889'

mkdir LA_authorities_boundaries
cd LA_authorities_boundaries
unzip ../LA_authorities_boundaries.zip

读取 shapefile 并创建一个虚拟 GeoDataFrame 来重现行为的 Python 代码。

import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt

gdf = gpd.read_file(
'LA_authorities_boundaries/Local_Authority_Districts_December_2015_Full_Extent_Boundaries_in_Great_Britain.shp'
)

# 380 values
df = pd.DataFrame([])
df['AREA_CODE'] = gdf.lad15cd.values
df['central_pop'] = np.random.normal(30, 15, size=(len(gdf.lad15cd.values)))
df['low_pop'] = np.random.normal(10, 15, size=(len(gdf.lad15cd.values)))
df['high_pop'] = np.random.normal(50, 15, size=(len(gdf.lad15cd.values)))

加入来自 ONS 的 shapefile 并创建一个 geopandas.GeoDataFrame

def join_df_to_shp(pd_df, gpd_gdf):
""""""
df_ = pd.merge(pd_df, gpd_gdf[['lad15cd','geometry']], left_on='AREA_CODE', right_on='lad15cd', how='left')

# DROP the NI counties
df_ = df_.dropna(subset=['geometry'])

# convert back to a geopandas object (for ease of plotting etc.)
crs = {'init': 'epsg:4326'}
gdf_ = gpd.GeoDataFrame(df_, crs=crs, geometry='geometry')
# remove the extra area_code column joined from gdf
gdf_.drop('lad15cd',axis=1, inplace=True)

return gdf_

pop_gdf = join_df_to_shp(df, gdf)

绘制图

fig,(ax1,ax2,ax3,) = plt.subplots(1,3,figsize=(15,6))

pop_gdf.plot(
column='low_pop', ax=ax1, legend=True, scheme='quantiles', cmap='OrRd',
)
pop_gdf.plot(
column='central_pop', ax=ax2, legend=True, scheme='quantiles', cmap='OrRd',
)
pop_gdf.plot(
column='high_pop', ax=ax3, legend=True, scheme='quantiles', cmap='OrRd',
)
for ax in (ax1,ax2,ax3,):
ax.axis('off')

enter image description here

我希望所有三个 ax 对象共享相同的 bin(最好是 central_pop 场景 quantiles),以便图例与整个图。一个场景(中心)的分位数将成为所有场景的级别

这样,我应该在最右侧的 ax 中看到较深的颜色(更红),显示 high_pop 场景。

如何为整个图形/每个 ax 对象设置颜色方案箱?

我可以看到这个工作的最简单方法是a) 向 geopandas.plot() 函数提供一组 binb) 从一个ax中提取颜色方案/容器并将其应用到另一个。

最佳答案

从 geopandas 0.5 开始,您可以使用定义为 scheme="User_Defined" 的自定义方案,并通过 classification_kwds 提供分箱。

import geopandas as gpd
print(gpd.__version__) ## 0.5
import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
gdf['quant']=np.random.rand(len(gdf))*100-20

fig, ax = plt.subplots()

gdf.plot(column='quant', cmap='RdBu', scheme="User_Defined",
legend=True, classification_kwds=dict(bins=[-10,20,30,50,70]),
ax=ax)

plt.show()

enter image description here

因此剩下的任务是从其中一列的分位数中获取 bin 列表。这应该很容易完成,例如通过

import mapclassify
bins = mapclassify.Quantiles(gdf['quant'], k=5).bins

然后在上面的代码中设置classification_kwds=dict(bins=bins)

enter image description here

关于python - matplotlib geopandas 绘制 choropleth,并设置颜色方案的 bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56690524/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com