Создание дуг между двумя точками в ArcPy?

10

Я работал над сценарием Python, автоматизирующим визуализацию данных о точках в реальном времени. У меня есть таблица с двумя парами координат. Я хотел бы соединить эти две точки с дугой окружности или подобным (парабола ??).

Мне удалось соединить две точки прямой линией, но это дает мне скучную визуализацию.

Одним из основных препятствий является мой уровень лицензии: ArcView.

Кто-нибудь есть идеи, как я могу создать набор точек, которые представляют путь линии между этими двумя точками?

Затем я могу использовать команду точек на полилинию.

пиксель
источник
5
Вы на самом деле не предоставляете достаточно информации: «улучшить скучный визуал» не является ни конкретной, ни хорошей постановкой проблемы. Но, возможно, вы получите некоторые идеи из аналогичной ветки на gis.stackexchange.com/questions/5204/… .
whuber
1
Вы одновременно просматриваете много строк или только одну (или несколько) одновременно?
Энди W
Число точек может быть от 2 до 50.
Pixel

Ответы:

27

Кажется, самая распространенная проблема с этими типами «потоковых карт» состоит в том, что, когда включено много линий, они сталкиваются до такой степени, что затрудняет обнаружение любого неочевидного паттерна (когда рассматриваются взаимные потоки, это случается с в еще большей степени). Также длинные линии имеют тенденцию доминировать над графиком, хотя вполне возможно, что распределение потоков происходит преимущественно по коротким промежуткам (например, множество различных распределений между местами, как правило, похоже на полеты Леви ). Я полагаю, что это не обязательно плохо (длинные строки могут быть более интересными, чем короткие линии для многих явлений), но я не думаю, что мы хотим, так сказать, потерять лес за деревьями.

Хотя я не сомневаюсь, что пропустил некоторые потенциальные «решения», которые были предложены, я постараюсь обобщить некоторые способы, которыми люди пытались решить проблему в работе, с которой я столкнулся.

Искажая Линии

Если вы просматриваете некоторые другие темы, вы увидите несколько примеров того, как люди справляются с этой проблемой. В частности, линии искажены, поэтому они не перекрывают друг друга или другие объекты на карте. Whuber в ответ на другой аналогичный вопрос (уже упоминалось в комментариях) является примером этого. Презентация некоторых исследователей в Стэнфорд демонстрирует эту же идею (Phan и др., 2005). Спасибо за эту презентацию, отправляемую dslamb за этот ответ в другой ветке (и все ответы на эту ветку будут также интересны для вашего вопроса). Мне особенно интересно, что один из кардинальных примеров этого - старая иммиграционная карта Минарда - пример желаемого результата (около 1864 года!).

Учитывая ваш конкретный вариант использования (небольшое количество узлов и линий), этого кажется достаточным. Другие «решения», которые я представляю, больше предназначены для визуализации данных с множеством строк и множеством мест назначения-назначения (хотя я предполагаю, что они будут полезны для сообщества в целом, поэтому я продолжу в любом случае).

Использование альфа-смешивания, цвета и ширины линии / высоты

Карты, которые я перечислил в том же потоке, ранее отмеченном, « Представление сетевых потоков» являются примерами этого. Друзья из Facebook - хороший пример настройки альфа-уровня линий, поэтому требуется гораздо больше потоков, чтобы представить более темную (или более яркую в этом случае) связь между двумя местами. Это также подчеркивает более длинные линии, потому что они, как правило, происходят реже. Аналогичная логика исходит из карт Value-by-Alpha для областей многоугольников (Roth et al., 2010), которые упоминались ранее на этом форуме .

Другая карта, которую я представляю в том же ответе, использует цвет и нетрадиционные трехмерные перспективные линии дуги (Ratti et al., 2010). Авторы использовали критерии кластеризации для группировки однородных областей и цветового кодирования их (поэтому, по определению, области в цвете имеют больше сходных структур потока, чем между цветами). Критерии кластеризации сами по себе могут быть интересны для определения закономерностей в данных, хотя, как упоминал Эндрю Гельман, кажется, что проблема в этом заключается в том, что она говорит вам в значительной степени то, что вы уже знаете, что приближает друг друга как правило, иметь больше связей.

Наконец, в эту категорию я включаю методы, которые взвешивают линии (аналогично альфа-смешиванию), используя либо ширину линии, либо в случае высоты трехмерной линии перспективы, чтобы передать объем потока. См. Страницу на странице программного обеспечения Tobler Flow Mapping для ознакомления с некоторыми примерами в 2d (а другая статья, которую я упомянул, является примером в 3d с использованием высоты строк). Также на этой странице Tobler имеет очень полезную статью, описывающую проблемы с отображением потоков и их историческое применение (Tobler, 1987).

Другой пример в 3d - это ответ mankoff на этом сайте. Этот пост в блоге «Социологические изображения» показывает полезный способ на блок-схеме различать входящие и исходящие потоки (хотя, опять же, это работает, потому что число узлов относительно небольшое, а узлы в сети можно расположить в произвольный способ уменьшить оверплоттинг). Те же типы стрел (и некоторые другие, использующие хеширование) также есть в (Tobler, 1987).

В конце концов, хотя ширина и цвет линии не решают проблему чрезмерного построения графика. Дуги в 3d несколько помогают, хотя с более сложными схемами потока я думаю, что они будут иметь ограниченную полезность. Альфа-смешивание ИМО, по-видимому, является наиболее полезным в самых разных ситуациях из этих трех, но цвет и ширину линии можно / нужно использовать в сочетании с искажением линии, упомянутым выше.

Сжатие данных

Здесь я группирую два типа методов: 1) использование небольших множественных карт (т. Е. Множество карт с меньшим количеством объектов для визуализации, поэтому избыточное построение сокращается), или 2) другие графические представления, которые не являются линиями, но представляют некоторые потоки через плотность или картограммы. Примеры их можно найти в (Corcoran et al., 2009; Rae, 2009; Wood et al., 2010) (спасибо iant за ссылку Rae). Они, как правило, уменьшают объем визуальной информации, представляемой либо представлением серии небольших множественных карт (или просто меньшей площади), либо используют схему сопоставления хороплетов для представления некоторой статистики (примерами могут быть число входных потоков, количество оттоков , направление потоков, среднее расстояние потоков). Если у вас есть данные точечного уровня, вы можете представить эти статистические данные с помощью растровых карт плотности ядра или объединить их в квадраты.

Когда информация уменьшается таким образом, переполнение не является такой большой проблемой. Очень интересный интерактивный онлайн-пример - карта миграции журнала Forbes . Вы можете видеть только один округ за раз, но сокращение информации значительно упрощает анализ строк (и разницы между входящими и исходящими потоками). В недавнем сообщении в блоге по картированию ESRI также используется похожая техника с небольшими коэффициентами (они также выбирают конкретную проекцию для карты мира, чтобы иметь «красивые» линии, и хорошо используют цвет для дальнейшего выделения различных международных источников). В этом примере это работает довольно хорошо, потому что конечное назначение одинаково для всех потоков, но если потоки могут быть взаимными, это, вероятно, также не сработает.

Использование других не связанных с картой представлений потоков

Другие на этом сайте предложили использовать альтернативные схемы реальной карте для представления потоков (просто отображая места происхождения и назначения другим способом, нежели их фактическое географическое местоположение). Примерами этого являются либо конкретные визуализации (например, созданные Circos ), дуговые диаграммы (см. Этот пример в Protovis, их также называют крискограммами (Xiao & Chun, 2009)), либо матричные тепловые карты ( вот еще один пример из Веб-сайт Protovis) Другим вариантом может быть использование некоторого типа автоматической компоновки сети для идентификации шаблонов в потоках (например, способных Graphviz ). Помимо Graphviz, похоже, Gephi, библиотека Python NetworkX и некоторые библиотеки R также являются популярными инструментами (см.этот ответ на сайте статистики).

Библиотеки, которые я цитирую, довольно крутые, поскольку они также разработали интерактивные визуализации. Вот пример с похожим стилем на круговую графику (хотя и не круговую!). Вот еще одна интерактивная визуализация, использующая некоторые из методов искажения линий, обсуждавшихся ранее, размещение в сети (которое похоже на круговые картограммы Дорлинга), а также другие полезные статистические сводки (оба этих примера я видел первоначально в блоге по информационной эстетике ).


Некоторые другие ресурсы, которые, на мой взгляд, полезны, - это программное обеспечение и статьи из лаборатории пространственного анализа данных и визуальной аналитики . Кроме того, моделирование спроса на преступные поездки в программе CrimeStat - это краткое введение в применимые методы регрессии для таких потоковых данных. Любой из этих инструментов может позволить вам выявить интересные корреляции в шаблонах потока с другой географической информацией. Еще одно место, где можно получить полезное вдохновение для графического отображения данных или статистического анализа, - недавний выпуск журнала «Вычислительная и графическая статистика», том 20, выпуск 2., при изучении статистики прибытия / вылета рейса для коммерческих перевозчиков в США с 1987 по 2008 год (если вы заинтересованы в обработке больших данных, это также стоило бы изучить). Все статьи бесплатны, и у них есть постеры с каждой газетой.

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


Цитирование

* примечание, ссылки на документы без pdf включены, когда я смог найти

Энди У
источник
2
В настоящее время я опустил любую графику, но по запросу я могу включить любую, если люди хотят видеть примеры без необходимости переходить по ссылкам.
Энди W
Ого !! ... В комплекте с цитатами! Если бы я мог голосовать дважды, я бы! Удивительный ответ, чувак :)
R Thiede
В настоящее время я нашел еще одну довольно классную интерактивную визуализацию, использующую сокращение данных (и большие круговые линии). Узнайте, какой город США наиболее популярен среди международных охотников за домами, в блоге Trulia Insights.
Энди W
5

Там хорошая процедура здесь , на нашем собственном Подземье.

По сути, процедура выглядит следующим образом: - повторно спроецируйте точки, между которыми вы хотите провести линию, - проведите прямую линию между ними, - разделите эту линию на x частей и, наконец, - спроецируйте разделенную линию обратно на исходную проекция.

Я перестал использовать Arc, потому что это стоит денег, но чтобы эта процедура работала, я не думаю, что вам нужно платить ESRI какие-либо дополнительные взятки, чтобы дать вам базовую функциональность. Я имею в виду, я не думаю, что вам нужно покупать какие-либо "расширения". Я говорю с коррекцией, потому что я не уверен, является ли подразделение строки частью Spatial Analyst. Возможно, некоторые из более склонных к ЭСР могут помочь мне здесь? :)

R Thiede
источник
1
Раньше у вас не было возможности создавать истинные кривые с ArcView, но ArcView теперь может создавать истинные кривые с версии 9.
blord-castillo
2

Вы можете создавать визуально привлекательные полилинии из двух точек на карте, используя метод большого круга. Проверьте http://www.esri.com/software/arcgis/defense-solutions/military-analyst.html - Военный аналитик. Должен иметь то, что вы ищете!

Майкл Маркиета
источник
Я не совсем разбираюсь в Arc больше, но разве нельзя сделать это с некоторыми репроекциями? Потому что военный аналитик, вероятно, будет стоить вам денег ...
R Thiede
Я не верю, что это решение будет работать в любом случае, так как протяженность моей карты будет около 40 миль в поперечнике. Я считаю, что это может сработать, если бы это было в масштабе континента.
Pixel
Военный аналитик свободен @RThiede Да, это будет работать лучше в большей степени. Тем не менее, вы можете редактировать линии после их создания, чтобы дать вам то, что вы хотите (так как они используют кривые Безье для создания сотен точек вдоль полилиний для создания кривой)
Майкл Маркиета,
Я мог бы легко редактировать строки, чтобы получить нужные мне дуги, но, как указывалось в моем сообщении, я использую Python для автоматизации этого процесса. Спасибо за ответ!
Пиксель