背景
有一组比值数据,需要使用geopandas进行地图绘制,要求小于1的数据用冷色表示,大于1的数据用暖色表示;
但是数据并不对称,小于1的数据很少,大于1的数据很多;
均匀分组或使用内置算法分组后,使用内置色卡无法满足要求,会出现大于1的数据同样是冷色表示的错误图形。
为了解决这个问题,需要自定义色卡
Python中的色卡
关于内置色卡,可参考相关文章
关于色卡的使用,比较简单:
cmap = plt.get_cmap('RdBu_r') # 通过plt读入色卡
色卡一般是在[0,1]区间内连续的,输入一个小数,就会得到一个RGBA的颜色值,可以直接使用
新建色卡
色卡可以建立分段的、连续的等,具体怎么建立,参考相关文章
数据地图绘制
首先使用内置算法,例如FisherJenks对数据进行分组,得到分界值;
之后依据分界值,将数据映射到[0,1]的均匀区间,例如如果分为5组,则第一组数据映射为0,第二组映射为0.2……
根据设定的组数,定义色卡颜色数量,并建立色卡,例如还是5组:
cp = [cmap(_/8) for _ in range(len(bins)-1)]
cp = [cp[2]] + cp[4:] # 在已有色卡中取色
cmap2 = ListedColormap(cp, N=len(cp)) # 建立色卡
最后将需要绘制的数据以及色卡传入geopandas.plot中即可得到结果