Geopandas使用对数比例尺的颜色映射表

3
如果我有如下图所示的图表,我该如何将颜色图例/标注变成对数刻度?
import geopandas as gpd
import matplotlib.pyplot as plt

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world = world[(world.pop_est>0) & (world.name!="Antarctica")]
fig, ax = plt.subplots(1, 1)
world.plot(column='pop_est', ax=ax, legend=True)

enter image description here

2个回答

8

GeoPandas 的绘图使用了 matplotlib,因此您可以使用它提供的颜色映射归一化。请注意,我还将列的最小值和最大值作为我正在绘制的 mins 和 maxs 进行了指定。

world.plot(column='pop_est', legend=True, norm=matplotlib.colors.LogNorm(vmin=world.pop_est.min(), vmax=world.pop_est.max()), )

map


谢谢,看起来很棒!但是我遇到了AttributeError: module 'matplotlib.pyplot' has no attribute 'colors'的问题。在我的脚本开头,我有import matplotlib.colors as colors - Stücke
明白了,我需要移除 matplotlib :) - Stücke
explore 方法有什么内容吗? - Vovin
@Vovin 不,你需要手动完成它。 - martinfleis
@martinfleis 我已经通过自定义颜色映射解决了这个问题。 - Vovin
@martinfleis 哇,太棒了!!帮了我很多!顺便问一下,如果我想使用这个解决方案(对数刻度),但仍然保留非对数标签,该怎么办? - silvio

0
你可以简单地绘制值的对数而不是值本身。
import geopandas as gpd
import matplotlib.pyplot as plt
from numpy import log10

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world = world[(world.pop_est>0) & (world.name!="Antarctica")]
world['logval'] = log10(world['pop_est'])
fig, ax = plt.subplots(1, 1)
world.plot(column='logval', ax=ax, legend=True)

1
如果你这样做,那么你的图例将不会显示你想要展示的实际值。 - martinfleis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接