Измените размер точки с помощью geom_count (ggplot2, R)

#r #ggplot2

Вопрос:

Пытаюсь найти решение для настройки размера точки при использовании geom_count. Geom_count увеличивает точки, когда точки перекрываются. При создании разных участков с помощью geom_count все они показывают разные размеры точек (что может привести к путанице при сравнении участков). Я видел другие варианты в ggplot2 для изменения размера точки, но затем geom_count отменяется.

Вот пример версии сценария:

 x <- c(10,30,60,80,80,100,30,40)
y <- c(30,70,50,80,80,80,40,50)
db <- merge(x,y)

ggplot(db, aes(x, y)) 
  geom_count(alpha=0.8, colour="steelblue") 
  scale_size_area(breaks = round) 
  theme_bw()   theme(panel.grid.minor = element_blank(), plot.tag.position = "bottomleft") 
  labs(title= "X vs Y",subtitle="       ", tag = "A")
 

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

Ответ №1:

Если вы хотите согласовать размеры точек на разных участках, вам нужно будет вручную задать соответствующие ограничения. Рассмотрим следующий пример:

 library(ggplot2)
library(patchwork)
#> Warning: package 'patchwork' was built under R version 4.0.3

n <- 10000

df1 <- data.frame(
  x = sample(LETTERS[1:5], n, replace = TRUE),
  y = sample(LETTERS[1:5], n, replace = TRUE)
)

df2 <- data.frame(
  x = sample(LETTERS[1:5], n / 10, replace = TRUE),
  y = sample(LETTERS[1:5], n / 10, replace = TRUE)
)

plot1 <- ggplot(df1, aes(x, y))  
  geom_count()

plot2 <- ggplot(df2, aes(x, y))  
  geom_count()
 

Размеры двух участков ужасно не синхронизированы:

 plot1   plot2
 

Вы можете вручную рассчитать, какими должны быть пределы масштабов, и применить их к различным участкам.

 range <- range(c(table(df1$x, df1$y), table(df2$x, df2$y)))

# 'amp;' operation is about the same as adding this scale to individual plots
plot1   plot2 amp; scale_size_area(limits = range)
 

Создано 2021-03-31 пакетом reprex (v1.0.0)

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

1. Большое вам спасибо, кажется, это работает! Это действительно дало мне странные перерывы в легендах. Поэтому для других читателей вы можете изменить легенду с помощью (plot1 plot2 amp; scale_size_area(limits = range, breaks=round) или указать цифры (plot1 plot2 amp; scale_size_area(limits = range, breaks=1:2)

2. Этот код, похоже, больше не работает, когда у вас более двух групп. Он не показывает некоторые данные, и вы часто сталкиваетесь с такими вещами, как 7.5 (что не имеет никакого смысла). Есть какие-нибудь идеи?

3. Можете ли вы привести воспроизводимый пример того, когда что-то идет не так?

4. В процессе создания воспроизводимого примера я выяснил, где все пошло не так! Приносим извинения за причиненные неудобства.

5. Не нужно никаких извинений! Просто показывает, что создание репрезентаций также полезно для самодиагностики 🙂