Agregar una barra de colores de matplotlib desde un PatchCollection

Estoy convirtiendo un Shapely MultiPolygon en un PatchCollection, y primero coloré cada Polígono así:

# ldn_mp is a MultiPolygon cm = plt.get_cmap('RdBu') num_colours = len(ldn_mp) fig = plt.figure() ax = fig.add_subplot(111) minx, miny, maxx, maxy = ldn_mp.bounds w, h = maxx - minx, maxy - miny ax.set_xlim(minx - 0.2 * w, maxx + 0.2 * w) ax.set_ylim(miny - 0.2 * h, maxy + 0.2 * h) ax.set_aspect(1) patches = [] for poly in ldn_mp: colour = cm(1. * len(filter(poly.contains, points)) / num_colours) patches.append(PolygonPatch(poly, fc=colour, ec='#555555', lw=0.2, alpha=1., zorder=1)) pc = PatchCollection(patches, match_original=True) ax.add_collection(pc) ax.set_xticks([]) ax.set_yticks([]) plt.title("Density of NO$^2$ Sensors by Borough") plt.tight_layout() plt.show() 

Pero me gustaría agregar una barra de colores a mi ttwig, basada en los colores de PatchCollection. No estoy seguro de cómo hacerlo; ¿Paso la palabra clave cmap al crear pc ? ¿Cómo llamo a set_array() con los colores que he usado?

Tuve el mismo problema hace un rato. Para cada polígono guardé el color correspondiente en una lista llamada mycolors:

 mycolors=[] ... mycolors.append(SSTvalue) path_patch = patches.PathPatch(mypath, lw=1) mypatches.append(path_patch) 

Recorrí una serie de multipolígonos almacenados en un Shapefile y almacené cada parche en una colección. Después de eso, dibujé los polígonos utilizando la información de color que tenía almacenada en la lista, que finalmente se convirtió en una matriz, y agregue una barra de colores:

 p = PatchCollection(mypatches, cmap=plt.get_cmap('RdYlBu_r'), alpha=1.0) p.set_array(array(mycolors)) p.set_clim([np.ma.min(mycolors),np.ma.max(mycolors)]) plt.colorbar(p,shrink=0.5) 

El script completo que utilicé para trazar valores de temperatura con colores y una barra de colores para los grandes ecosistemas marinos del mundo representados por polígonos se puede encontrar aquí . Espero que esto ayude. Saludos, Trond

No es necesario crear una lista adicional. Suponiendo que trabajas en pandas o matrices numpy.

Por ejemplo:

 import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import PatchCollection from matplotlib import cm fig, ax = plt.subplots() for c_l ,patches in dict_mapindex_mpl_polygon.items(): color = df_map_elements.loc[c_l, 'stress_level'] p = PatchCollection(patches,color=cm.Set2(color),lw=.3,edgecolor='k') ax.add_collection(p) ax.autoscale_view() p.set(array=df_map_elements['stress_level'].values, cmap='Set2') fig.colorbar(p, label="Stress (index)") plt.show()