Я использую Цветную карту colormap.YlOrRd
, чтобы закрасить каждый полигон (район) на моей карте, основываясь на населении в этом районе.
Однако какую цветную карту вы бы порекомендовали, если бы я хотел заштриховать каждый район на основе трех возможных результатов - скажем, католика, пресвитерианства или англиканца.Или скажем, консерватор, либертарианец или социалист.Или женат, холост или разведен.У меня есть 5000 районов на карте, и я не хочу использовать точечные круговые диаграммы.
Это решение для двух возможных результатов:

Также, скажем, два из результатов тесно связаны, в то время как третийне - например: Правая партия, Социалистическая народная партия и Партия социалистических людей.Здесь было бы неплохо заштриховать карту, чтобы было ясно, имеет ли право правящее большинство в округе или нет, и в то же время может визуализировать разницу между двумя социалистическими партиями.
Итак, допустим, мои данные организованы следующим образом:
RP SP PS
Jefferson Urban 1: 30 40 30
Jefferson Urban 2: 40 40 20
Jefferson Urban 3: 10 30 60
Jefferson Urban 4: 5 20 75
Washington Ward 1: 80 0 20
Washington Ward 2: 90 5 5
Lincoln Park West: 10 5 85
Lincoln Park East: 10 0 90
Вот один тип решения для трех результатов, который я нашел:
, где карта заштрихована на основе самой большой партии в округе.Не совсем то, что я хочу, потому что вы не можете понять, как каждая вечеринка выступала на районном уровне.Возможно, лучше всего иметь три отдельные карты для каждой партии.
В настоящее время я закрашиваю каждый район в соответствии с плотностью населения следующим образом:
colormap = cm.YlOrRd
norm = colors.LogNorm(vmin=(min(population.values())), vmax=(max(population.values())))
sm = plt.cm.ScalarMappable(cmap=colormap, norm=norm)
sm.set_array([])
for district in population:
col = colormap(population[district])
p = PolygonPatch(polygon[district],facecolor=col, edgecolor=col, zorder=2, lw=None, transform=ccrs.PlateCarree())
ax.add_patch(p)