matplotlib 当我为使用geopandas打印Map指定用户定义的颜色时,如何获得图例?

waxmsbnn  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(82)

我从geopandas的固有数据集创建了世界Map,如下所示:

world = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))

我已经绘制了世界Map,突出显示了独特的大陆使用

world.plot("continent", legend = True)

传说也出现在情节中。如下所示:

我会自动为每个大陆获得独特的颜色。然而,我想自己定义每个大陆的颜色,并在传说中使用它们。为了定义每个大洲的唯一颜色,我创建了一个字典color_dict,如下所示:

{'Oceania': 'yellow',
 'Africa': 'brown',
 'North America': 'maroon',
 'Asia': 'blue',
 'South America': 'green',
 'Europe': 'red',
 'Seven seas (open ocean)': 'skyblue',
 'Antarctica': 'white'}

然后我将它作为一个新列附加到world geopandas dataframe中,并再次创建了图。

world["Colors"] = world["continent"].map(color_dict)
world.plot("continent",
           color = world["Colors"],
           legend = True)

我得到了每个大陆想要的颜色。然而,现在我没有得到大陆的名字和颜色的传说。当我自己定义颜色的时候,我怎么能把故事情节中的传奇人物带进来呢?

dtcbnfnu

dtcbnfnu1#

您可能会发现,如果您使用笛卡尔将geopandas几何转换为多边形面片,然后使用matplotlib生成图,则可以获得更好的结果和更好的控制。
从geopandas绘制可能会很挑剔。可能需要一些尝试和错误才能得到你想要东西。
确保您的模块中有这些包

from matplotlib import pyplot
from descartes import PolygonPatch
from geopandas import GeoDataFrame

PolygonPatch允许您为每个几何体指定边颜色和面颜色。
使用pyplot,您应该能够创建您想要的图例。
形成你的大陆地理数据框架(gdf)。对于你的gdf中的每个大陆,用你想要的面颜色形成一个多边形面片。然后将面片添加到pyplot图形中。使用pyplot,您应该能够更容易地指定图例并操作它。
下面是一些关于多边形面片的文档,以及绘制它们的示例(尽管没有使用您正在寻找的确切图例格式):https://pypi.org/project/descartes/https://geoffboeing.com/2014/09/visualizing-summer-travels-part-6-projecting-spatial-data-python/

igetnqfo

igetnqfo2#

基于this,这是潜在的解决方案:

color_dict = {'Oceania': 'yellow',
 'Africa': 'brown',
 'North America': 'maroon',
 'Asia': 'blue',
 'South America': 'green',
 'Europe': 'red',
 'Seven seas (open ocean)': 'skyblue',
 'Antarctica': 'white'}

world["Colors"] = world["continent"].map(color_dict)

ax = world.plot(color = world["Colors"])

# add manual legend
from matplotlib.lines import Line2D
custom_points = [Line2D([0], [0], marker="o", linestyle="none", markersize=10, color=color) for color in color_dict.values()]
leg_points = ax.legend(custom_points, color_dict.keys())
ax.add_artist(leg_points)

输出:

相关问题