Python. Geopandas. Colormap

Кроме QGIS
Ответить
Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 140
Откуда: Нижний Новгород

Python. Geopandas. Colormap

Сообщение jerry-maori » 20 окт 2017, 10:56

Вопрос такой - можно ли для geopandas.plot() указать, каким цветом красить каждый полигон в зависиомти от значения.
т.е. задать прям палитру самому.
Нечто типа dict:

Код: Выделить всё

colors = {'High-High':'red', 'Low-High':'bright blue', 'Low-Low':'royal blue', 'High-Low':'orange','Non significant':'grey'}
Рисую локальную автокорреляцию (Local Moran I)
есть geodataframe с территориями, значениями и прочим.
а вот на colormap как-то подвис.

Заранее спасибо!
Последний раз редактировалось jerry-maori 21 окт 2017, 18:27, всего редактировалось 1 раз.

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Python. GEopandas. Colormap

Сообщение Andrey Zhukov » 20 окт 2017, 13:03

Ооо, это нетривиальная задача. Предсказуемости можно добавить с помощью прибитого гвоздями бининга, но вот ручками каждый класс красить не дадут. Для этого придется альтернативные подходы использовать. Например, делать визуалку через folium.

С другой стороны, в EDA момент с окраской в большинстве случаев не имеет значения.
Во, можно поиграться с кастомным colormap: https://matplotlib.org/examples/pylab_e ... _cmap.html

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 140
Откуда: Нижний Новгород

Re: Python. GEopandas. Colormap

Сообщение jerry-maori » 20 окт 2017, 13:25

Folium - не нравится :( Походит на строительство атомной станции ради одной лампочки
Предсказуемости можно добавить с помощью прибитого гвоздями бининга, но вот ручками каждый класс красить не дадут.
Так, классы у меня всегда одни и те же. И называются всегда одинаково.
Можно подробнее про бининг ? Хотя бы на какие слова гуглить?

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 140
Откуда: Нижний Новгород

Re: Python. GEopandas. Colormap

Сообщение jerry-maori » 21 окт 2017, 18:15

Задача получила своё решение, правда в слегка экзотическом стиле
Правда, проблема по сути никуда не ушла. Я вот теперь думаю, а как, допустим, полигон заштриховать....

Код: Выделить всё

import pysal as ps
import pandas as pd
import numpy as np
import geopandas as gpd

from matplotlib import pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.lines import Line2D
from matplotlib.collections import PatchCollection

Код: Выделить всё


type_line=['High-High','Low-High','Low-Low','High-Low','NS']
type_color= ['#252525','#969696','#cccccc', '#636363','#f7f7f7']

fig=plt.figure()
ax = plt.subplot(2,3,CPOS)
    ax.set_title('Local Moran`s I\n' +  w)
    
    for t,c in zip(type_line,type_color):
        block=shape[shape.LISA_QUAD==t]
        bx=[]
        for cc in range(0,block.shape[0]):
            poly=block[:].iloc[cc]
            poly=poly['geometry']
            x,y = poly.exterior.xy
            dst=np.vstack([x,y])
            dst=np.transpose(dst)
            bx.append(Polygon(dst, True))
        bx = PatchCollection(bx,label=t,edgecolor='black',color=c,linewidth=0.5)    
        ax.add_collection(bx)
    
    circ1 = Line2D([0], [0], linestyle='', marker='s', markersize=15, markerfacecolor=type_color[0])
    circ2 = Line2D([0], [0], linestyle='', marker='s', markersize=15, markerfacecolor=type_color[1])
    circ3 = Line2D([0], [0], linestyle='', marker='s', markersize=15, markerfacecolor=type_color[2])
    circ4 = Line2D([0], [0], linestyle='', marker='s', markersize=15, markerfacecolor=type_color[3])
    circ5 = Line2D([0], [0], linestyle='', marker='s', markersize=15, markerfacecolor=type_color[4])
        
    ax.legend((circ1, circ2, circ3,circ4,circ5), (type_line[0],type_line[1],type_line[2],type_line[3],type_line[4]), numpoints=1, loc='lower right')
    
    ax.set_axis_off()
    plt.axis('equal')

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 786
Ваше звание: званий не имею
Откуда: Москва

Re: Python. Geopandas. Colormap

Сообщение Александр Мурый » 21 окт 2017, 18:38

Попытался ради интереса выполнить это в IPython, а там такое:
NameError: name 'CPOS' is not defined
Редактор материалов, модератор форума

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 140
Откуда: Нижний Новгород

Re: Python. Geopandas. Colormap

Сообщение jerry-maori » 21 окт 2017, 18:47

Это просто куски, чтобы было ясно, что именно делается.
т.е. не полный код -- оттого и не работает.

Ответить

Вернуться в «Свободные, бесплатные, открытые ГИС»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость