Как избежать наложения меток на графике R? [закрыто]

44

Я пытаюсь обозначить довольно простую диаграмму рассеяния в R. Это то, что я использую:

plot(SI, TI)
text(SI, TI, Name, pos=4, cex=0.7)

Результат посредственный, как вы можете видеть (нажмите, чтобы увеличить):

введите описание изображения здесь

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

Есть ли какая-либо функция или простой способ компенсировать это и позволить R наносить метки, которые не перекрываются ?


Вот небольшое подмножество данных, которые у меня есть:

Name;SI;TI
01_BAD_talking_head;6.944714;4.421208
01_GOOD_talking_head;5.680141;4.864035
01_GOOD_talking_head_subtitles;7.170114;4.664205
slhck
источник
1
Я разместил подобный вопрос здесь , посмотрите ответы там ..
Любопытный
3
Я нашел решение ! Теперь identify()давайте сами решим, где разместить этикетку! Это не идеально, но из предложенных решений это работает лучше всего для меня.
Любопытно
1
blog.revolutionanalytics.com/2016/01/…
Адам Робинссон

Ответы:

29

Проверьте новый пакет ggrepel . ggrepel предоставляет geoms для ggplot2 для отражения перекрывающихся текстовых меток. Работает как для geom_text, так и для geom_label.

введите описание изображения здесь

Рисунок взят из этого поста .

Сухдип Сингх
источник
19

directlabelsПакет делает это. С его веб-страницы :

Этот пакет является попыткой сделать прямую маркировку реальностью в повседневной статистической практике, сделав доступным целый ряд полезных функций, которые упрощают прямую маркировку общих графиков с помощью высокоуровневых систем построения графиков, таких как lattice и ggplot2.

Хотя это не всегда возможно для плотных участков.

Вот краткий пример:

set.seed(123)
a <- c(rnorm(10,-3,2),rnorm(10,3,2))
b <- c(rnorm(10,-3,2),rnorm(10,3,2))
dfr <- data.frame(a,b)
dfr$t <- c(paste("A",1:10,sep=""),paste("B",1:10,sep=""))
direct.label(xyplot(b~a,dfr,groups=t, col="black"))

Мне удалось избавиться от точки окраски col="black", но не метки.

Laurent
источник
1
У меня проблемы с тем, чтобы заставить его работать. Не могли бы вы привести простой рабочий пример?
Slhck
1
В вашем случае нечто подобное direct.label(xyplot(SI~TI,data=yourDataFrame,group=Name))должно получить аналогичный результат.
Лоран
Отлично. Вот что я закончил, используя ваш последний простой пример. Цветные метки и точки на самом деле очень хороши, так как вы знаете, где эти метки принадлежат.
Slhck
1
Я должен был использовать, library(lattice)чтобы добраться xyplotдо работы.
Дэвид Дж. Харрис
14

Я бы посоветовал вам взглянуть на wordcloudпакет. Я знаю, что этот пакет фокусируется не только на точках, но и на самих этикетках, а также стиль кажется довольно фиксированным. Но, тем не менее, результаты, которые я получил от его использования, были ошеломляющими. Также обратите внимание, что версия пакета, о которой идет речь, была выпущена примерно в то время, когда вы задавали вопрос, поэтому она все еще очень новая.

http://blog.fellstat.com/?cat=11

вывод textplot ()

Maj
источник
9

Я столкнулся с похожей проблемой с несколькими графиками, с которыми работал, и написал базовый пакет, в котором для моделирования местоположения объектов используется моделирование силового поля. Преимущество перед некоторыми из приведенных выше решений заключается в динамической настройке относительной близости объектов в 2D. Несмотря на то, что возможны значительные улучшения, включая эвристику и интеграцию с ggplot и т. Д., Похоже, задача выполнена. Следующее иллюстрирует функциональность:

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

На данный момент нет эвристики для различных областей и распределений точек, так как решение удовлетворяло мои потребности, и я хотел быстро найти что-то полезное для людей, но я добавлю их в среднесрочной перспективе. В настоящее время я рекомендую масштабировать графики до 100x100 и обратно и слегка подправить параметры притяжения и отталкивания по умолчанию в соответствии с требованиями.

gregk
источник
8

В случае, если вы просто не можете заставить метки работать правильно, как в R, имейте в виду, что вы всегда можете сохранить графики в векторном формате (например, .pdf) и перетащить их в программу редактирования, такую ​​как InkScape или Adobe Illustrator.

фомиты
источник
8

Несколько дополнительных инструментов, на которые можно посмотреть в R:

Они не сделают все для вас, но один из них может быть частью решения.

Грег Сноу
источник