Как создать разрывы по оси 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")