ggplot указывает положение вертикальных сегментов для категориального x r

Я рисую данные строки и добавляю сегмент достоверных интервалов и черную точку для статистически рассчитанных значений.

Моя проблема в том, что я хотел бы, чтобы эти линии (и черная точка) были слегка перемещены (по горизонтали) относительно данных строки.

Я попробовал джиттер и все возможные его комбинации, результаты ужасны, потому что я получаю значения y start и end из разных столбцов... следовательно, с джиттером линии больше не горизонтальны.

Я попытался добавить фиксированное значение к 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))

И все возможные комбинации скобок.

Конечно, я искал в Интернете подобный график, но не смог найти --> обычно вертикальные линии рассчитываются непосредственно из точек данных, а не добавляются к данным строк из разных столбцов!


person have fun    schedule 23.02.2015    source источник


Ответы (1)


Если ваши значения x действительно являются факторами, вы можете использовать as.numeric() вокруг значений x в 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")

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

person Didzis Elferts    schedule 23.02.2015
comment
Хорошо, спасибо, я пробовал это, но только с numeric вместо as.numeric, и я получил следующую ошибку: Error in numeric(pb_cluster) : invalid 'length' argument - person have fun; 23.02.2015
comment
Отличный обходной путь для построения категориальных переменных на числовых графиках. Должен иметь возможность использовать этот метод и во многих других геометриях. Спасибо! - person Alison Bennett; 06.10.2020