Вы можете использовать аргумент 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