Как добавить аккуратный многоугольник вокруг группы точек на диаграмме рассеяния? Я использую ggplot2, но разочарован результатами geom_polygon
.
Набор данных находится там как текстовый файл с разделителями табуляции. На графике ниже показаны два показателя отношения к здоровью и безработице в ряде стран:
Я хотел бы перейти от geom_density2d
менее причудливой, но эмпирически более правильной geom_polygon
. Результат на несортированных данных бесполезен:
Как нарисовать «аккуратные» многоугольники, которые ведут себя как контурные контуры вокруг значений min-max yx? Я попытался сортировать данные безрезультатно.
Код:
print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) +
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))
d
Объект получен с этим CSV - файлом .
Решение:
Спасибо Уэйну , Энди У и другим за их советы! Данные, код и графики были размещены на GitHub . Результат выглядит так:
?chull
сggplot2
до сих пор. Я не уверен, что кодирую это правильно, и надеюсь, что кто-то уже сделал это.alphahull
работает аналогично нахождению выпуклой оболочки, но позволяет вам регулировать его внутрь / наружу, чтобы попытаться сделать что-то вроде доверительных интервалов.Ответы:
С некоторым гуглом я наткнулся на сайт Готы Мороты, у которого уже есть пример сделать это на ее сайте . Ниже этот пример распространяется на ваши данные.
источник
NA
убитьchull
функцию. Я ожидал бы, что это просто проигнорирует это, но это терпит неудачу, и я не нашел способа использовать это,na.omit()
чтобы заставить это работать. Я уверен, что это возможно, у меня просто нет навыков взлома, чтобы выйти за рамки предыдущего решения.Если я понимаю вашу проблему, вы ищете выпуклый корпус
health
иunemployment
. Вероятно, есть несколько пакетов для этого в R, один из которых - пакетgeometry
. Я предполагаю, что точки отсортированы по периметру, но вам нужно это проверить.РЕДАКТИРОВАТЬ: Вот пример, который не использует
ggplot
, но я надеюсь, что это полезно. Пример вchull
документации кажется неправильным, что может сбить вас с толку:РЕДАКТИРОВАТЬ 2: ОК, вот что-то с помощью ggplot2. Переходим
X
вdata.frame
с переменнымиx
иy
. Затем:Обратите внимание, что
geom_point
используется data (X
) и aes из ggplot, а я переопределяю его вgeom_polygon
.Чтобы получить его полностью, вам нужно поместить x и y для корпуса для обеих проблем
bar
, используя третий столбецissue
для их дифференциации.источник
chull
для создания выпуклой оболочки, но не удалось использовать результаты сggplot2
.ggplot2
.na.omit
чтобы избавиться от АН, которые перестаютchull
работать. Еще раз спасибо.На сегодняшний день я обернул
chull
функцию внутри пакета R какgeom_convexhull
функцию.После того, как пакет загружен, его можно использовать как любой другой geom, в вашем случае это должно быть что-то вроде:
Пакет доступен на github: https://github.com/cmartin/ggConvexHull
источник
chull
через фактор группировки, пока не нашел это.