R — отображение количества точек, которые перекрываются, а не символа

#r #plot #overlap

#r #график #перекрытие

Вопрос:

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

Вот некоторый код, который генерирует график, для которого я надеюсь это сделать:

рабочий <- 1:10

дефекты <- t(матрица(rbinom(200, 100, 0.1), ncol=10))

matplot(рабочий, дефекты)

Заранее спасибо за любую помощь, которую вы можете предоставить!

Комментарии:

1. Почему бы вам просто не подсчитать количество дубликатов в отдельном столбце и использовать это в качестве символа. Просто удалите все дубликаты, и вы сможете отобразить его

Ответ №1:

Добро пожаловать в SO!

Вам нужно получить «количество» наблюдений для каждой пары x, y, а затем вы можете использовать аннотации для получения своего графика. Вот пример использования data.table и ggplot2 :

 library(data.table)
library(ggplot2)

# using a sample dataset 
dat <- as.data.table(mtcars)

# creating a variable called "count" for no. of overlaps for a given (gear,carb) pair 
ggplot(dat[, .(count = .N), by = .(gear, carb)])   
  geom_text(aes(x = gear, y= carb, label = count) )
 

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

Вы можете форматировать текст любым удобным для вас способом (шрифт, размер и т.д.) Или комбинировать с другими элементами, например, добавить geom_point , чтобы вы видели точку вместе с текстом — вы можете установить прозрачность или размер в зависимости от количества перекрывающихся точек ( count в этом примере).

 # Using nudge_x, nudge_y to avoid marker and text overlap
ggplot(dat[, .(count = .N), by = .(gear, carb)])   
  geom_text(aes(x = gear, y= carb, label = count), nudge_x = 0.05, nudge_y = 0.05)   
  geom_point(aes(x = gear, y = carb), color = 'dark red')
 

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

Надеюсь, это полезно!

Комментарии:

1. ОЧЕНЬ полезно! Большое вам спасибо!

2. Хорошо, пожалуйста, «примите» ответ, если он работает для вас — поэтому он помечен как решаемый.

3. Мне просто нужно было проголосовать за это или есть что-то еще? Я не вижу кнопки «принять». извините, новичок на сайте. Спасибо!

4. @HaroldBuck вы должны увидеть галочку под кнопкой upvote, читайте здесь: meta.stackexchange.com/questions/5234 /…

5. Спасибо! Многое объяснено.