我想用累积分布函数(CDF)和概率密度函数(PDF)绘制一幅图,它有一个统一的x轴和y轴,左右两侧各有一个比例范围.我try 在ggplot2中使用sec_axis(),但PR只能绘制一条线,而另一条线的Y轴无效.我该怎么办?

new_data <- rnorm(n=100,mean=8000,sd=1000)
new_data <- as.data.frame(new_data)
names(new_data) <- c("CADP")

m1 <- ggplot(new_data,aes(x=CADP))+geom_density()
p1 <- ggplot(new_data, aes(x =CADP))+stat_ecdf(colour="red")+
           labs(
           x="CADP")

PR <- p1+scale_y_continuous(expand=c(0,0),limits=c(0,1),
                 sec.axis = sec_axis(~.*4e-04,breaks=seq(0,4e-04,1e-04)))+
                 geom_density(colour="blue")

推荐答案

stat_ecdfgeom_density生产的两条生产线的规模大不相同.cdf的峰值约为pdf峰值的2500倍.如果你想在同一个图上清楚地看到这两条线,你需要对其中一条进行变换,或者将cdf除以2500左右,或者将pdf乘以2500左右.你需要这样做.

请记住,次轴只是一个固定在绘图一侧的惰性注释:它不会更改已绘图对象的大小、比例或形状.次轴的标记方式允许您"假装"某些数据处于不同的比例.其工作方式是将变换应用于数据,使其适合于绘图,并将逆变换作为函数传递给sec_axis.

虽然可以对stat_ecdf的输出应用转换,但自己创建转换后的cdf并用geom_step绘制也同样容易

library(ggplot2)

new_data <- data.frame(CADP = rnorm(100, 8000, 1000))

ggplot(new_data,aes(x = CADP)) + 
  geom_density(colour = 'blue') +
  geom_step(aes(x = sort(CADP), 
                y = 0.0004 * seq_along(CADP)/nrow(new_data))) +
  scale_y_continuous(name = 'PDF',
                     sec.axis = sec_axis(~.x / 0.0004, name = 'CDF'))

enter image description here

R相关问答推荐

检测(并替换)字符串中的数学符号

derrr mutate case_when grepl不能在R中正确返回值

如何在Chart_Series()中更改轴值的 colored颜色 ?

将饼图插入条形图

如何在R中描绘#符号?

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

当我添加美学时,geom_point未对齐

如何在R中通过多个变量创建交叉表?

使用R中的dist()迭代ID匹配的欧几里德距离

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

如果COLSUM为>;0,则COLNAME为向量

使用shiny 中的所选要素行下拉菜单

如何阻止围堵地理密度图?

如何在R中的两列以上使用联合(&U)?

随机生成样本,同时在R内的随机样本中至少包含一次所有值

如何在一种 colored颜色 中设置数值变量的 colored颜色 和高于阈值的 colored颜色 点?

R:改进实现简单模型

如何修复geom_rect中的层错误?

使用相对风险回归计算RR