R - ggplot dodging geom_lines

Это было то, над чем я экспериментировал некоторое время, чтобы найти исправление, но в основном мне было интересно, есть ли быстрый способ «уклониться» от линейных графиков для двух разных наборов данных в ggplot2.

Мой код в настоящее время:

#Example data
id <- c("A","A")
var <- c(1,10)
id_num <- c(1,1)
df1 <- data.frame(id,var,id_num)

id <- c("A","A")
var <- c(1,15)
id_num <- c(0.9,0.9)
df2 <- data.frame(id,var,id_num)


#Attempted plot
dodge <- position_dodge(width=0.5)
p<- ggplot(data= df1, aes(x=var, y=id))  +
  geom_line(aes(colour="Group 1"),position="dodge") + 
  geom_line(data= df2,aes(x=var, y=id,colour="Group 2"),position="dodge") +
  scale_color_manual("",values=c("salmon","skyblue2"))
p

Который производит:

Здесь строка «Группа 2» скрывает всю строку «Группа 1», а это не то, что я хочу. Вместо этого я хочу, чтобы строка «Группа 2» была ниже линии «Группа 1». Я посмотрел вокруг и нашел этот предыдущий пост:Смещение точек рассеяния ggplot2 но я не могу адаптировать код, чтобы заставить две geom_lines уклоняться друг от друга при использовании отдельных фреймов данных.

Я конвертировал свои y-переменные в числовые и немного смещал их, чтобы получить желаемый результат, но мне было интересно, есть ли более быстрый / простой способ получить тот же результат, используя функциональность dodge ggplot или что-то еще.

Моя работа с кодом проста:

p<- ggplot(data= df1, aes(x=var, y=id_num))  +
  geom_line(aes(colour="Group 1")) + 
  geom_line(data= df2,aes(x=var, y=id_num,colour="Group 2")) +
  scale_color_manual("",values=c("salmon","skyblue2")) + 
  scale_y_continuous(lim=c(0,1))
p

Дайте мне желаемый результат:

Желаемый вывод:

Числовой подход может быть немного громоздким, когда я пытаюсь расширить его, чтобы он соответствовал моим фактическим данным. Я должен преобразовать свои значения y в факторы, изменить их на числовые, а затем объединить значения во второй набор данных, так что более быстрый способ был бы предпочтительным. Заранее спасибо за помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос