Вы можете использовать аргумент 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()
Похоже, что вы пытаетесь достичь?
РЕДАКТИРОВАТЬ: Добавление текста в середине каждой точки
Чтобы добавить маркировку в каждую точку, вы можете использовать geom_text
и установить то же самое position_dodge2
аргумент, чем для geom_point
.
Примечание: я использую 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"))