Ошибка при использовании geom_segment для добавления строки в ggplot - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу добавить линию в этот график, используя geom_segment, но когда я запускаю следующий код, у меня появляется эта ошибка «Недостаточно значений в ручном масштабе. 3 необходимо, но только 2 предоставлено».Мне было интересно, как я могу решить эту проблему.

Age      Alcohol   sex    X0.025  X0.975   L_LCI  L_UCI  U_LCI  U_UCI
1.000    211     Female   191.26  416.98 176.530 200.98 360.19 483.78
1.025    281     Female   300.20 306.03 166.300 310.10 300.28 381.77
1.103    195     Female   168.20 706.03 150.300 200.10 330.28 790.77
1.144    350     Female   148.20 506.03 100.300 150.10 390.28 510.77
1.156    256     Female   396.20 416.03 300.300 400.10 390.28 481.77 
2.922    336     Male     396.20 416.03 300.300 400.10 390.28 481.77
3        110     Male     191.26  416.98 176.530 200.98 360.19 483.78
1        410     Male     396.20 416.03 300.300 400.10 390.28 481.77 
1.001    501     Male    155.90 350.93 143.210 168.59 330.27 371.60
5        701     Male    155.76 349.35 143.210 168.30 329.95 368.76
1.289    165     Male    184.34 388.74 160.910 199.76 331.66 445.82

SP=ggplot(Data, aes(x=Age, y= Alcohol,color=sex,fill=sex))+
  geom_point()+ 
  scale_shape_manual(values=c(1,1), name='sex', labels=c('Female','Male'))+ #0.25
  geom_line(aes(x = Age, y = X0.025),size=1) +
  geom_line(aes(x = Age, y = X0.975),size=1) +
  geom_ribbon(aes(x = Age, ymin = L_LCI,ymax=L_UCI),alpha = 0.2,linetype=0) +
  geom_ribbon(aes(x = Age, ymin = U_LCI,ymax= U_UCI),alpha =0.2,linetype=0) +

  labs(x = 'Age (Years)', y = '')+
  scale_x_continuous(breaks = round(seq(1, 19, by = 1),0)) +
  scale_y_continuous(expand = c(0, 0),breaks = round(seq(0, 600, by = 100),0))+
  scale_color_manual(breaks = c("Female", "Male"),
                     values=c("#EC6696", "#558ED5"))+ 

 scale_fill_manual(breaks = c("Female", "Male"),
                     values=c("#EC6696", "#558ED5"))+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        axis.title.x=element_text(size=15,face="bold"),  axis.title.y=element_text(size=15,face="bold"),axis.text.x=element_text(size=13),
        axis.text.y=element_text(size=13),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),plot.title = element_text(vjust=-15,hjust=0.02,
color="black", size=20,face="bold"))+

       ggtitle("Tile")+ coord_cartesian(xlim = c(1,19), ylim = c(0,700))+
       theme(legend.text=element_text(size=12, face = "bold"),legend.key.size = unit(1.5, 'lines'), legend.spacing.x = unit(0.1, 'cm'),legend.justification = c(0, 1.5),legend.position = c(0, 1),
legend.box.margin=margin(c(10,10,10,10)))+theme(legend.title = element_blank())+
guides(color = guide_legend(override.aes = list(size = 1.3)))

SP+ geom_segment(aes(x = 1, y = 156, xend = 1, yend = 156,colour ="black"))

enter image description here

1 Ответ

0 голосов
/ 23 ноября 2018

Попробуйте:

SP <- ggplot(Data)+
  geom_point(aes(x=Age, y= Alcohol, color=sex, fill=sex))+ 
  scale_shape_manual(values=c(1,1), name='sex', labels=c('Female','Male'))+ #0.25
  geom_line(aes(x = Age, y = X0.025, color=sex),size=1) +
  geom_line(aes(x = Age, y = X0.975, color=sex),size=1) +
  geom_ribbon(aes(x = Age, ymin = L_LCI, ymax=L_UCI, color=sex,fill=sex),alpha = 0.2,linetype=0) +
  geom_ribbon(aes(x = Age, ymin = U_LCI, ymax= U_UCI, color=sex, fill=sex),alpha =0.2,linetype=0) +
  labs(x = 'Age (Years)', y = '')+
  scale_x_continuous(breaks = round(seq(1, 19, by = 1),0)) +
  scale_y_continuous(expand = c(0, 0),breaks = round(seq(0, 600, by = 100),0))+
  scale_color_manual(breaks = c("Female", "Male"),
                     values=c("#EC6696", "#558ED5"))+ 
  scale_fill_manual(breaks = c("Female", "Male"),
                    values=c("#EC6696", "#558ED5"))+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        axis.title.x=element_text(size=15,face="bold"),  axis.title.y=element_text(size=15,face="bold"),axis.text.x=element_text(size=13),
        axis.text.y=element_text(size=13),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),plot.title = element_text(vjust=-15,hjust=0.02, color="black", size=20,face="bold"))+
  ggtitle("Tile")+ coord_cartesian(xlim = c(1,19), ylim = c(0,700))+
  theme(legend.text=element_text(size=12, face = "bold"),legend.key.size = unit(1.5, 'lines'), legend.spacing.x = unit(0.1, 'cm'),legend.justification = c(0, 1.5),legend.position = c(0, 1),
        legend.box.margin=margin(c(10,10,10,10)))+theme(legend.title = element_blank())+
  guides(color = guide_legend(override.aes = list(size = 1.3)))

df <- data.frame(x1 = 1, y1 = 156, x2 = 1, y2 = 156)
SP + geom_segment(aes(x = x1, xend = x2, y = y1, yend = y2), colour ="black", data = df)

Обратите внимание, что сегмент не будет видимым, так как он начинается и заканчивается в одной и той же точке в соответствии с вашими координатами.

...