ggplot указывает положение вертикальных сегментов для категориального x r
Я строю данные строки, и я добавил сегмент вероятных интервалов и черную точку для статистически рассчитанных подогнанных значений.
Моя проблема в том, что я хотел бы, чтобы эти линии (и черная точка) слегка смещались (горизонтально) относительно данных строки.
Я попробовал джиттер и все возможные комбинации, результаты ужасные, потому что я получаю значения y начала и конца из разных столбцов... следовательно, с джиттером линии больше не горизонтальны.
Я попытался добавить фиксированное значение к x (pb_values), однако это дает мне ошибку, потому что мой x является фактором.
dat_stack1 (мой набор данных):
dat_stack1<-data.frame(pb_cluster= rep(3:5, 6))
dat_stack1$pb_cluster<-factor(dat_stack1$pb_cluster)
dat_stack1$total<-c(28, 12, 3, 326, 14, 125, 74, 40, 115, 382, 70, 36, 36, 23, 28,185,19,107)
dat_stack1$couple<-factor(c(1, 1, 1, 2, 2, 2, 5, 5, 5, 8, 8, 8, 9, 9, 9, 11, 11, 11))
dat_stack1$lower<-c(55, 0.1851138, 8.9413495, 55.5002200, 0.1851138, 8.9413495, 55.5002200, 0.1851138, 8.9413495, 55.5002200, 0.1851138, 8.9413495, 55.5002200, 0.1851138, 8.9413495, 55.5002200, 0.1851138, 8.9413495)
dat_stack1$upper<-c(225.47047, 68.04097, 114.92182, 225.47047, 68.04097, 114.92182, 225.47047, 68.04097, 114.92182, 225.47047,68.04097,114.92182, 225.47047, 68.04097, 114.92182, 225.47047, 68.04097, 114.92182)
dat_stack1$fit<-c(124.93260, 18.87026, 46.84022,124.93260, 18.87026,46.84022,124.93260, 18.87026, 46.84022, 124.93260, 18.87026, 46.84022,124.93260, 18.87026, 46.84022, 124.93260 ,18.87026 ,46.84022)
g<-g_stack<-ggplot(data=dat_stack1, aes(x=pb_cluster, y = total, shape=couple))+
geom_point()+
scale_x_discrete(limits=c("3","4","5"), labels=c("mate", "familiar","unfamiliar"))+
theme(axis.text.x = element_text(angle=90))+
geom_segment(aes(x=pb_cluster, xend=pb_cluster, y = lower, yend = upper))+
geom_point(aes(x=pb_cluster, y = fit),color="black")
К сожалению, моя репутация слишком низкая, чтобы публиковать изображения! Но код теперь воспроизводим
Есть идеи, как двигать эти вертикальные линии?
Что я пробовал:
geom_segment(aes(x=pb_cluster, xend=pb_cluster,
y = lower, yend = upper)+position="jitter")
а также
geom_segment(aes(x=pb_cluster +0.1, xend=pb_cluster+0.1,
y = lower, yend = upper))
И все возможные комбинации скобок.
Конечно, я искал в Интернете похожий график, но не смог найти ни одного -> обычно вертикальные линии рассчитываются непосредственно из точек данных и не добавляются в данные строк из разных столбцов!
1 ответ
Если ваши значения х действительно являются факторами, то вы можете использовать as.numeric()
вокруг значений х в geom_segment()
и последний geom_point()
чтобы иметь возможность добавить небольшую константу, а затем сместить линию и точку.
ggplot(data=dat_stack1, aes(x=pb_cluster, y = total, shape=couple))+
geom_point()+
scale_x_discrete(limits=c("3","4","5"),labels=c("mate", "familiar","unfamiliar"))+
theme(axis.text.x = element_text(angle=90))+
geom_segment(aes(x=as.numeric(pb_cluster)+.1, xend=as.numeric(pb_cluster)+.1,
y = lower, yend = upper))+
geom_point(aes(x=as.numeric(pb_cluster)+0.1, y = fit),color="black")