首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用geopandas和mapclassify绘制“差异”地图?

如何使用geopandas和mapclassify绘制“差异”地图?
EN

Stack Overflow用户
提问于 2019-04-15 04:44:43
回答 1查看 711关注 0票数 1

我有一个带有"differences“列的GeoDataFrame,用于存储两个数字之间的差值。有时,如果没有差异,这些数字是正数、负数或零。我需要制作一个色彩图,它有一些以0(或一些中间缓冲区)作为中点和非对称色带的发散色图,例如-0.02, -0.01, 0., 0.01, 0.02, 0.03。我已经尝试过了

代码语言:javascript
运行
复制
class MidPointNormalize(mp.colors.Normalize):
    def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
        self.midpoint = midpoint
        mp.colors.Normalize.__init__(self, vmin, vmax, clip)

    def __call__(self, value, clip=None):
        x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
        return np.ma.masked_array(np.interp(value, x, y), np.isnan(value))

norm = MidPointNormalize(midpoint=0,vmin=diff_merge_co["diff"].min(),
                         vmax=diff_merge_co["diff"].max())
diff_merge_co.plot(ax=ax, column="diff", cmap="coolwarm", norm=norm,
                   legend=True)

并将norm设置为一些精心挑选的值:

代码语言:javascript
运行
复制
bounds = np.array([-0.02, -0.01, 0., 0.01, 0.02, 0.03])
norm = colors.BoundaryNorm(boundaries=bounds, ncolors=256) 

但这样做有很多技术问题(包括颜色条不是一直向上的,以及手工选择值的明显丑陋)。

所以我的问题是:你将如何使用geopandas.GeoDataFrame.plot()绘制具有不同比例的地图,你会使用哪种mapclassify方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 06:17:34

我可能不理解这个问题,但这两个想法都应该很好用。例如:

代码语言:javascript
运行
复制
import geopandas as gpd
print(gpd.__version__)   ## 0.4.1
import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt 
import matplotlib.colors as mcolors

class MidPointNormalize(mcolors.Normalize):
    def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
        self.midpoint = midpoint
        mcolors.Normalize.__init__(self, vmin, vmax, clip)

    def __call__(self, value, clip=None):
        x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
        return np.ma.masked_array(np.interp(value, x, y), np.isnan(value))

## Some data file from ## http://biogeo.ucdavis.edu/data/diva/adm/USA_adm.zip    
gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) 
quant = np.random.rand(len(gdf))*0.05-0.02
gdf['quant']=quant
print(gdf.head())


fig, (ax, ax2) = plt.subplots(2, figsize=(7,6))

norm=MidPointNormalize(-0.02, 0.03, 0)
gdf.plot(column='quant', cmap='RdBu', norm=norm, ax=ax)
fig.colorbar(ax.collections[0], ax=ax)


bounds = np.array([-0.02, -0.01, 0., 0.01, 0.02, 0.03])
norm2 = mcolors.BoundaryNorm(boundaries=bounds, ncolors=256) 
gdf.plot(column='quant', cmap='RdBu', norm=norm2, ax=ax2)
fig.colorbar(ax2.collections[0], ax=ax2)


plt.show()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55679885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档