Home > Software engineering >  How to add thousand separator in geopandas pyplot legend?
How to add thousand separator in geopandas pyplot legend?

Time:10-12

I am plotting a legend of a map with geopandas and matplotlib.pyplot. I want to see the legend values with a thousand separator, e.g. 100,000,000 at the moment it is shown like '100000000'. I would also like to be able to write the number like '100mill'. How can I achieve these two options?

df_test.plot(
             ax=ax,
             zorder=1,
             cax=cax,
             column='tax',
             cmap='YlOrRd',
             legend=True,
             legend_kwds={'label': '(USD)',
                          'orientation': "vertical",
                          'pad': 0.3,
                          'format': '%.0f'},
);

CodePudding user response:

It seems there is no option to set a thousand separator with geopandas plot function and legend_kwds. I solved it by retrieving the automatically generated axis labels with

ax.get_figure().get_axes()[1].get_yticks()

and then creating a custom colorbar:

legend_labels_auto = ax.get_figure().get_axes()[1].get_yticks()
vmin, vmax = legend_labels_auto[0], legend_labels_auto[-1]
sm = plt.cm.ScalarMappable(cmap='YlOrRd', norm=plt.Normalize(vmin=vmin, 
vmax=vmax))
sm._A = []
cbar = fig.colorbar(sm, cax=cax, fraction=0.1, label='test')

In the geodataframe plot one has to add:

geodf.plot{
           ax=ax,
           cax=cax,
           legend=True} # legend=True even though we create our own custom legend later
  • Related