Добавьте горизонтальные линии в категориальный график рассеяния, используя ggplot2 в R

Я пытаюсь построить простой точечный график для 3 групп с разными горизонтальными линиями (отрезками) для каждой группы: например, hline на 3 для группы «a», hline на 2,5 для группы «b» и hline на 6 для группы «в».

library(ggplot2)
df <- data.frame(tt = rep(c("a","b","c"),40),
             val = round(rnorm(120, m = rep(c(4, 5, 7), each = 40))))
ggplot(df, aes(tt, val))+
geom_jitter(aes(tt, val), data = df, colour = I("red"), 
position = position_jitter(width = 0.05))

Я очень ценю вашу помощь!


person Anna    schedule 20.09.2016    source источник
comment
Пробовал что-то вроде этого: geom_segment(aes(x=0.75,xend=1.25,y=3,yend=3))   -  person Martin Schmelzer    schedule 20.09.2016


Ответы (2)


Никогда не отправляйте строку, когда достаточно точки:

library(ggplot2)

df <- data.frame(tt = rep(c("a","b","c"),40),
                 val = round(rnorm(120, m = rep(c(4, 5, 7), each = 40))))

hline <- data.frame(tt=c("a", "b", "c"), v=c(3, 2.5, 6))

ggplot(df, aes(tt, val))+
  geom_point(data=hline, aes(tt, v), shape=95, size=20) +
  geom_jitter(aes(tt, val), data = df, colour = I("red"), 
              position = position_jitter(width = 0.05))

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

Есть и другие способы, если это неприемлемо, например:

hline <- data.frame(tt=c(1, 2, 3), v=c(3, 2.5, 6))

ggplot(df, aes(tt, val))+
  geom_jitter(aes(tt, val), data = df, colour = I("red"), 
              position = position_jitter(width = 0.05)) +
  geom_segment(data=hline, aes(x=tt-0.25, xend=tt+0.25, y=v, yend=v))

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

Недостатком точки является вопиющая толщина и отсутствие контроля над шириной.

Недостатком сегмента является необходимость использования числовых значений для положения дискретной оси по сравнению с коэффициентами.

Я также должен был установить случайное начальное число, чтобы обеспечить воспроизводимость.

person hrbrmstr    schedule 20.09.2016

Спасибо, работает нормально. Однако второе решение не работает, когда я использую пузырьковую диаграмму.

df <- data.frame(tt = rep(c("a","b","c"),40),
val = round(rnorm(120, m = rep(c(4, 5, 7), each = 40))),s=rep(c(1,10,5,50),each=30))

hline <- data.frame(tt=c(1, 2, 3), v=c(3, 2.5, 6))

ggplot(df, aes(tt, val,size=s))+

geom_jitter(aes(tt, val), data = df, colour = I("red"), 
position = position_jitter(width = 0.05))+
geom_segment(data=hline, aes(x=tt-0.25, xend=tt+0.25, y=v, yend=v))

Ошибка в eval(expr, envir, enclos): объект не найден

person Anna    schedule 20.09.2016