Рисование картограмм с помощью 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. Хотя я не смог заставить его работать, поэтому не могу это прокомментировать.

Короче нет. Но у Ньюмана есть отличная небольшая реализация метода его и Гастнера на его веб-сайте. Установка его проста и работает из командной строки. Вот пример рабочего процесса с использованием этого программного обеспечения, который работал для меня.

  1. Вычислить сетку оценок плотности по некоторому региону, например, в Python. Сохраните это как матрицу чисел.
  2. Запустить cart запрограммируйте вашу матрицу плотности в качестве входных данных из командной строки или из подпроцесса в Python.
  3. Программа возвращает список новых координат для каждой точки сетки.
  4. Передайте ваши точки шейп-файла через interp Программа и в новый шейп-файл, чтобы получить преобразованную карту.

На главной странице есть приятные инструкции.

Функция геоплот.картограммы в Geoplot: визуализация геопространственных данных - геоплот 0.2.0

говорит, что это высокоуровневая библиотека геопространственных карт Python и расширение для cartopy и matplotlib.

Попробуйте эту библиотеку, если вы используете геопанды, она работает быстро и не требует особой настройки. https://github.com/mthh/cartogram_geopandas

Другие вопросы по тегам