Как создать разрывы по оси X в CDF в R?

Используя следующие данные, которые представляют собой общее количество секунд:

$head date-subtraction_total_seconds.csv
    15806856.0
    15806970.0
    190922.0
    860863.0
    33441.0
    15806835.0
    84041.0
    17197453.0
    17195029.0
   -48.0

Я вытягиваю данные в R:

df<-read.delim("date-subtraction.csv",sep=",",header=F)
df<-data.frame(seconds=df$V1,days=df$V1/86400)

Я создаю cdf:

ggplot(df, aes(x=df$days, y=ecdf(df$days)(df$days)))+ 
  geom_step(size=2.2,color="red")+geom_step(color="cyan",size=1.5)+
  scale_y_continuous(labels = percent_format(), limits=c(0,1))+ 
  labs(x="Time (days)", y="% Total")+
  ggtitle("Cumulative Distritubtion Function")+
  xlim(-1,8)

Когда я пытаюсь разорвать метки оси X в определенных точках, я получаю странное сообщение о добавлении еще одной шкалы, изменения графика и метки, кажется, накладываются друг на друга:

ggplot(df, aes(x=df$days, y=ecdf(df$days)(df$days)))+ 
  geom_step(size=2.2,color="red")+geom_step(color="cyan",size=1.5)+
  scale_y_continuous(labels = percent_format(), limits=c(0,1))+ 
  labs(x="Time (days)", y="% Total")+
  ggtitle("Cumulative Distritubtion Function")+
  xlim(-1,8)+
  scale_x_discrete(breaks = c(0,1,2,3,4,6,7))

"Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale."

Нужно ли создавать дни как фактор? Есть ли другой способ создать эти перерывы?

2 ответа

Решение

Вы добавляете масштаб к оси X с xlim() а затем с scale_x_discrete(), Вместо этого вы должны использовать аргумент пределы в scale_x_discrete():

ggplot(df, aes(x=df$days, y=ecdf(df$days)(ComplianceDateDiff$days)))+ 
  geom_step(size=2.2,color="red")+geom_step(color="cyan",size=1.5)+
  scale_y_continuous(labels = percent_format(), limits=c(0,1))+ 
  labs(x="Time (days)", y="% Total")+
  ggtitle("Cumulative Distritubtion Function")+
  scale_x_discrete(breaks = c(0,1,2,3,4,6,7), limits = c(-1, 8)

Если кому-то интересно, я в итоге использовал scale_x_continuous() с конкретными перерывами, что аналогично решению @alexwhan. Спасибо за помощь! Вы все можете увидеть код ниже:

ggplot(df, aes(x=df$days, y=ecdf(df$days)(df$days)))+ 
  geom_step(size=1.2,color="red",alpha=0.8)+geom_step(color="cyan")+
  scale_x_continuous(limits=c(-1,8),breaks=c(0,1,2,3,4,5,6,7))+ 
  scale_y_continuous(labels = percent_format(), limits=c(0,1),breaks=c(.0,.33,.5,.75,1))+ 
  labs(x="Time (days)", y="% Compliance")+
  ggtitle("Cumulative Distritubtion Function")
  #scale_x_discrete(breaks = c(0,1,2,3,4,6,7), limits = c(-1, 7))
  #geom_hline(yintercept = .3333, color="orange",size=1,linetype = "dashed")
Другие вопросы по тегам