Как избежать перекрывания пузырьков на пузырьковом графике?

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

b <- ggplot(df, aes(x = Year, y = Type))

b + geom_point(aes(color = Spp, size = value), alpha = 0.6) +
  scale_color_manual(values = c("#0000FF", "#DAA520",  "#228B22","#E7B888")) +
  scale_size(range = c(0.5, 12)) 

person Dendrobium    schedule 28.02.2020    source источник


Ответы (1)


Вы можете использовать аргумент position_dodge() в своем geom_point. Если вы примените его непосредственно к своему коду, он расположит точки горизонтально, поэтому идея состоит в том, чтобы поменять местами ваши переменные x и y и использовать coord_flip, чтобы получить их правильно:

library(ggplot2)
ggplot(df, aes(y = as.factor(Year), x = Type))+ 
  geom_point(aes(color = Group, size = Value), alpha = 0.6, position = position_dodge(0.9)) +
  scale_color_manual(values = c("#0000FF", "#DAA520",  "#228B22","#E7B888")) +
  scale_size(range = c(1, 15)) +
  coord_flip()

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

Это похоже на то, чего вы пытаетесь достичь?


EDIT: Добавление текста в середине каждой точки

Чтобы добавить метку в каждую точку, вы можете использовать geom_text и установить тот же аргумент position_dodge2, что и для geom_point.

NB: я использую position_dodge2 вместо position_dodge и немного меняю значения ширины, потому что я нашел position_dodge2 более подходящим для этого случая.

library(ggplot2)
ggplot(df, aes(y = as.factor(Year), x = Type))+ 
  geom_point(aes(color = Group, size = Value), alpha = 0.6, 
             position = position_dodge2(width  = 1)) +
  scale_color_manual(values = c("#0000FF", "#DAA520",  "#228B22","#E7B888")) +
  scale_size(range = c(3, 15)) +
  coord_flip()+
  geom_text(aes(label = Value, group = Group), 
            position = position_dodge2(width = 1))

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

Воспроизводимый пример

Поскольку вы не предоставили воспроизводимый пример, я сделал пример, который, возможно, не полностью отражает ваш исходный набор данных. Если мой ответ не работает для вас, вам следует рассмотреть возможность предоставления воспроизводимого примера (см. здесь: Как сделать отличный воспроизводимый пример R)

Group <- c(LETTERS[1:3],"A",LETTERS[1:2],LETTERS[1:3])
Year <- c(rep(1918,4),rep(2018,5))
Type <- c(rep("PP",3),"QQ","PP","PP","QQ","QQ","QQ")
Value <- sample(1:50,9)
df <- data.frame(Group, Year, Value, Type)
df$Type <- factor(df$Type, levels = c("PP","QQ"))
person dc37    schedule 28.02.2020
comment
Большое спасибо @dc37, я очень ценю ваш быстрый ответ - person Dendrobium; 28.02.2020
comment
Привет @ dc37, Просто небольшая услуга, как я могу обозначить каждое значение в верхней части его «пузыря»? Заранее спасибо. - person Dendrobium; 28.02.2020
comment
Что ты имеешь в виду? Добавление числа значений каждого числа поверх каждого пузыря? или в середине каждого пузыря? - person dc37; 28.02.2020
comment
Да, в середине каждого пузыря, как обозначить его значение. - person Dendrobium; 28.02.2020
comment
Я отредактировал свой ответ, чтобы показать вам, как это сделать. Дайте мне знать, если это работает - person dc37; 28.02.2020
comment
Вау, отлично. Огромное спасибо @dc37. Это именно то, что я хочу. Целый день бился над этим :) это очень большой df и все шло зажато. Еще раз спасибо. Хороших выходных ???? - person Dendrobium; 29.02.2020