【问题标题】:Editing Colorbar (Legend) in Geopandas?在 Geopandas 中编辑颜色条(图例)?
【发布时间】:2018-11-05 16:11:44
【问题描述】:

我想在我正在创建的 geopandas 世界 choropleth 中使用颜色条编辑多个内容。即大小(使其与地图本身大致匹配),文本大小(当前显示得太小),我还想为其添加一个标签。从阅读来看,似乎没有简单的方法可以在 geopandas 中明确地做到这一点,所以我想知道是否有人可以提供任何解决方法?任何帮助将不胜感激。

这是我目前正在使用的一段代码(在某些情况下,中间部分只是将列表与国家/地区的数字合并到框架中,我将其用作着色的基础)

fig, ax = plt.subplots(figsize=(40,29.171))
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))

world=pd.DataFrame(world)
world['LEADS']=0.1
world = world.set_index('name')
world['name']=world.index
for x, y in zip(Countries, country_counts):
    world.loc[x, 'LEADS'] = y
world=geopandas.GeoDataFrame(world)

world = world[(world.index != "Antarctica")]
ax.set_axis_off()
#ax.legend(title="Leads")
world.plot(ax=ax, column='LEADS', cmap='Oranges', legend=True,linewidth = 1.5)
plt.tight_layout()

plt.savefig('plot_image.png', bbox_inches='tight', transparent=True)

这里的理想解决方案是保持图例选项具有的颜色、指定大小和文本大小并在栏顶部启用标签。不幸的是,我正在努力弄清楚这一切是如何完成的。

【问题讨论】:

    标签: python pandas visualization geopandas choropleth


    【解决方案1】:

    here 找到的答案帮助我找到了解决方法。

    import matplotlib.pyplot as plt
    fig, ax = plt.subplots(figsize = (30,25))
    vmin = data.column.min()
    vmax = data.column.max()
    data.plot(ax=ax,column = column,edgecolor='black',cmap = 'YlOrRd',legend = False)
    plt.xlim([6,19])
    plt.ylim([36,47.7])
    plt.xticks([], [])
    plt.yticks([], [])
    
    cax = fig.add_axes([1, 0.1, 0.03, 0.8])
    sm = plt.cm.ScalarMappable(cmap='YlOrRd', norm=plt.Normalize(vmin=vmin, vmax=vmax))
    sm._A = []
    cbr = fig.colorbar(sm, cax=cax,)
    cbr.ax.tick_params(labelsize=200) 
    plt.tight_layout()
    plt.savefig(os.path.join('out','fig.png'),format = 'png',bbox_inches='tight')
    plt.show()
    

    一旦你有了你的 Colorbar 对象my_cbar,你就可以以 matplotlib 的方式设置属性。在这里,我更改了标签大小。如果需要保存图形,请记住使用bbox_inches='tight':否则不会保存颜色条。 我的输出是这样的,修改了颜色条字体大小。

    【讨论】:

    • "cbr.ax.tick_params(labelsize=200)" 对我不起作用,但 "plt.tick_params(labelsize=200)" 可以。不知道为什么。
    【解决方案2】:

    如何在单独的图中创建一个颜色条?

    使用here 找到的第一个示例,您可以创建一个函数:

    import matplotlib as mpl
    import numpy as np
    import matplotlib.pyplot as plt
    
    def create_colourbar(cmap, vmin, vmax, label, save_path=None):
        ''' Creates colourbar in separate figure 
        :param cmap: Cmap string or object
        :param vmin: minimum value in data array
        :param vmax: maximum value in data array
        :param label: colourbar label
        :param save_path: Save path, optional
        '''
    
        fig, ax = plt.subplots(figsize=(5, 1))
    
        cb1 = mpl.colorbar.ColorbarBase(cmap=cmap,
                                        norm=Normalize(vmin=vmin,
                                                       vmax=vmax),
                                        orientation='horizontal', ax=ax)
        cb1.set_label(label, fontsize=6)
        plt.tight_layout()
        if save_path:
            plt.savefig(save_path3)
        plt.show()
    

    地点:

    vmax = np.nanmax(world['LEADS'].values)
    vmin = np.nanmin(world['LEADS'].values)
    

    cmap 是一个颜色映射字符串或对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-30
      • 2013-02-18
      • 2022-08-19
      • 1970-01-01
      • 2020-11-10
      • 2015-09-12
      • 2016-06-26
      • 1970-01-01
      相关资源
      最近更新 更多