заполните каждый почтовый индекс другим цветом для базовой карты Matplotlib в Python 3.2

Я работаю над раскрашиванием полигона почтового индекса в базовой карте Matplotlib в Python 3.2.

Мне нужно заполнить каждый почтовый индекс другим цветом.

Информация о почтовом индексе берется из шейп-файла.

Я не могу найти решения по адресу: http://matplotlib.org/basemap/api/basemap_api.html

Любая помощь будет оценена по достоинству.

Спасибо


person user3601704    schedule 22.02.2015    source источник
comment
Пожалуйста, опубликуйте код, который вы используете для построения карты.   -  person MattDMo    schedule 23.02.2015
comment
возможный дубликат Заполнить страны на базовой карте Python   -  person Oliver W.    schedule 23.02.2015


Ответы (1)


Basemap имеет довольно удобный способ чтения шейп-файла.

m = Basemap()
m.readshapefile('file_without_extension', 'name')

Затем вы можете получить доступ к информации о шейп-файле с помощью m.name и m.name_info.

Затем создайте фрейм данных, который вы хотите использовать для информации о цвете.

import pandas as pd
import numpy as np
from matplotlib.patches import Polygon

zipdf = pd.DataFrame({
    'shapes': [Polygon(np.array(shape), True) for shape in m.name],
    'zip': [area['zip'] for area in m.name_info]
})

Если вы хотите включить информацию для раскрашивания, которая не включена в шейп-файл, объедините эту другую информацию с только что созданным фреймом данных.

zipdf = zipdf.merge(other_df, how='right', on='zip')

Теперь, чтобы раскрасить карту, я использовал карту цветов, которая принимает значения цен на аренду в почтовом индексе, поэтому я покажу это.

from matplotlib.collections import PatchCollection
import matplotlib.cm as cm
import matplotlib.colors as colors

fig = plt.figure()
ax = fig.add_subplot(111)

cmap = plt.get_cmap('viridis')
pc = PatchCollection(zipdf['shapes'], zorder=2)
norm = colors.Normalize()

pc.set_facecolor(cmap(norm(zipdf['price'].values)))
ax.add_collection(pc)

cmapper = cm.ScalarMappable(norm=norm, cmap=cmap)
cmapper.set_array(zipdf['price'])
plt.colorbar(cmapper)

plt.show()

Чтобы узнать больше об этом, посетите http://www.datadependence.com/2016/06/creating-map-visualisations-in-python/.

Дайте мне знать, если я что-то упустил!

person Henry Woody    schedule 16.11.2017