使用ggplot制作这个ecdf图?

make this ecdf plot using ggplot?

这是数据x1:344,347,351,351,355 我需要根据上面的数据绘制经验累积分布函数,这是我的解决方案

point<-na.omit(data$x1)
point<-point[!duplicated(point)]
point<-point[order(point)]

prob<-ecdf(data$x1)
prob<-prob(data$x1)
prob<-prob[order(prob)]
prob<-na.omit(prob)
x1<-data$x1[order(data$x1)]
x1<-c(340,344,347,351,355)
x2<-c(344,347,351,355,360)
prob2<-prob[!duplicated(prob)]

data1<-cbind(x1,x2,prob,point,prob2)
data1<-as.data.frame(data1)

ggplot(data=data1)+
  geom_segment(mapping = aes(x = x1,xend = x2,y = prob,yend = prob))+
  scale_x_continuous(limits = c(340,360))+
  scale_y_continuous(limits = c(0,1))+
  geom_point(mapping = aes(x = point ,y = prob2))

我觉得这太复杂了,不像图片上的情节, 但我真的不知道如何在不使用 base plot()(或 stepfun() 的情况下简化它,因为它看起来不太好)。 我考虑了几个小时,非常感谢您的帮助!

您可以通过为要绘制的值创建一个小数据框来手动完成。

library(ggplot2)

data <- c(344, 347, 351, 351, 355)

df <- data.frame(x    = c(-Inf, data), 
                 xend = c(data, Inf), 
                 y    = c(0, 0.2, 0.4, 0.4, 0.8, 1))

ggplot(df, aes(x, y)) + 
  geom_segment(aes(xend = xend, yend = y), size = 1) +
  geom_point(aes(x = xend), shape = 21, fill = "white", size = 3) +
  theme_classic()