Рисование картограмм с помощью Matplotlib?
В случае, если кто-то не знает: картограмма - это тип карты, где какое-либо числовое свойство, зависящее от страны / региона, масштабирует соответствующие регионы так, чтобы плотность этого свойства была (близка к) постоянной. Примером является
с http://www.worldmapper.org/. В этом примере страны масштабируются в соответствии с их населением, что приводит к почти постоянной плотности населения.
Излишне говорить, что это действительно круто. Кто-нибудь знает основанную на Matplotlib библиотеку для рисования таких карт? Метод, используемый на worldmapper.org, описан в (1), поэтому я бы удивился, если бы никто еще не реализовал это...
Мне также интересно услышать о других библиотеках картограмм, даже если они не созданы для Matplotlib.
(1) Michael T. Gastner и MEJ Newman. Основанный на диффузии метод создания карт, выравнивающих плотность, Proc. Туземный Акад. Sci. USA, 101, 7499-7504 (2004). Доступно на сайте arXiv.
3 ответа
Это так, хотя он основан на другом алгоритме (и хотя он находится на сайте ESRI, он не требует ArcGIS). Конечно, когда у вас есть картограмма, вы можете построить ее в matplotlib.
Вот плагин Javascript для создания картограмм с использованием D3. Это хорошее, простое решение, если вас не слишком заботит точный размер регионов. Если важна точность, есть и другие доступные опции, которые дают вам больше свободы для игры с параметрами алгоритма, чтобы получить более точный результат.
Вот две замечательные автономные программы, о которых я знаю:
Scapetoad очень прост в использовании. Просто дайте ему шейп-файл, скажите ему, какой атрибут использовать для масштабирования, и установите несколько параметров точности. Если есть какие-либо сомнения, этот пост описывает процесс.
Carto3F является более сложным и обеспечивает большую точность, хотя и немного сложнее разобраться - множество настроек параметров без большого количества документации, объясняющей их.
Существует также плагин картограммы QGIS, написанный на Python. Хотя я не смог заставить его работать, поэтому не могу это прокомментировать.
Короче нет. Но у Ньюмана есть отличная небольшая реализация метода его и Гастнера на его веб-сайте. Установка его проста и работает из командной строки. Вот пример рабочего процесса с использованием этого программного обеспечения, который работал для меня.
- Вычислить сетку оценок плотности по некоторому региону, например, в Python. Сохраните это как матрицу чисел.
- Запустить
cart
запрограммируйте вашу матрицу плотности в качестве входных данных из командной строки или из подпроцесса в Python. - Программа возвращает список новых координат для каждой точки сетки.
- Передайте ваши точки шейп-файла через
interp
Программа и в новый шейп-файл, чтобы получить преобразованную карту.
На главной странице есть приятные инструкции.
Функция геоплот.картограммы в Geoplot: визуализация геопространственных данных - геоплот 0.2.0
говорит, что это высокоуровневая библиотека геопространственных карт Python и расширение для cartopy и matplotlib.
Попробуйте эту библиотеку, если вы используете геопанды, она работает быстро и не требует особой настройки. https://github.com/mthh/cartogram_geopandas