【发布时间】:2019-06-19 14:02:28
【问题描述】:
我正在城市地图上绘制某个分类值。我用来绘制的代码行如下:
fig = plt.figure(figsize=(12, 12))
ax = plt.gca()
urban_data.plot(column="category", cmap="viridis", ax=ax, categorical=True, /
k=4, legend=True, linewidth=0.5, /
legend_kwds={'fontsize':'19', 'loc':'lower left'})
其中城市数据是 geopandas 数据框,我使用 matplotlib 作为绘图库。参数legend_kwds 允许我控制图例上的次要内容,例如位置或字体大小,但我无法决定主要内容,例如图例框中条目的顺序。事实上,我的类别是排名的,比如说 1-2-3-4,但我总是让它们以不同的顺序显示。
是否可以对图例进行更多控制?例如通过在gdf.plot() 函数外部调用它?如果是这样,我如何将图例中的颜色与地图中的颜色匹配,这些颜色是 viridis 颜色图的离散值(我不确切知道)?
编辑:这是一个可验证的示例。不幸的是shapefiles需要其他文件才能工作,这里需要一个geometry(一个区域,而不是一个点)列,所以我不得不请你下载美国的this shpfile。您需要的一切都在此文件夹中。这是重现该问题的代码。输出的情节很糟糕,因为我不关心这里的坐标系,但重要的是图例。
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
gdf=gpd.read_file('.../USA_adm1.shp')
clusters=np.random.randint(0,4, size=52)
gdf['cluster']=clusters
clusdict={1: 'lower-middle', 2: 'upper-middle', 3: 'upper', 0: 'lower'}
gdf['cluster']=gdf['cluster'].map(clusdict)
fig = plt.figure(figsize=(12, 12))
ax = plt.gca()
gdf.plot(column='cluster',cmap='viridis', categorical=True, legend=True, ax=ax)
【问题讨论】:
-
当你说“我总是让它们以不同的顺序显示”时,这个顺序取决于什么?如果是数据框中出现的类别,您可能可以在绘图之前根据自己的喜好对其进行排序。
-
我的猜测是整体按字母顺序排序(因为它们是),但我不知道如何控制它。在 gdf 中,它们都是混合的。
-
我担心你需要在这里提供一些minimal reproducible example。也许this 可以根据您的情况进行调整?
-
@ImportanceOfBeingErnest 我添加了一个可验证的示例。不幸的是,有一个文件要下载,但之后很容易重现该问题。
-
好的,太好了。您现在在图例中想要的顺序是什么?和数字0到3有关系吗?
标签: python matplotlib legend geopandas choropleth