创建了一个未达到 1 的嵌套 cdf
created a nested cdf that doesn't reach 1
这是我希望绘制的一些可行的数据示例:
set.seed(123)
x <- rweibull(n = 2000, shape = 2, scale = 10)
x <- round(x, digits = 0)
x <- sort(x, decreasing = FALSE)
y <- c(rep(0.1, times = 500),rep(0.25, times = 500),rep(0.4, times = 500),rep(0.85, times = 500))
z <- rbinom(n=2000, size=1, prob=y)
df1 <- data.frame(x,z)
我想绘制 z 在 x 上的总体频率。
与典型的 cdf 不同,该函数不应达到 1.0,而是
sum(df1$z)/length(df1$z)
ymax 为 0.36 (721/2000)。
使用 ggplot2
我们可以使用以下命令创建 x 的 cdf:
library(ggplot2)
ggplot(df1, aes(x)) + stat_ecdf()
但我想扩展此图以显示 z 的累积百分比(作为 'x' 的函数)
最终结果应该喜欢
编辑
通过一些非常糟糕的数据操作,我能够生成类似于 cdf 图的东西,但是必须有一个使用各种包和 ggplot 的更漂亮和简单的方法
mytable <- table(df1$x, df1$z)
mydf <- as.data.frame.matrix(mytable)
colnames(mydf) <- c("z_no", "z_yes")
mydf$A <- 1:length(mydf$z_no)
mydf$sum <- cumsum(mydf$z_yes)
mydf$dis <- mydf$sum/length(z)
plot(mydf$A, mydf$dis)
您可以使用包dplyr
处理数据如下:
library(dplyr)
plot_data <- group_by(df1, x) %>%
summarise(z_num = sum(z)) %>%
mutate(cum_perc_z = cumsum(z_num)/nrow(df1))
这给出了与您在编辑中描述的数据处理相同的结果。但是请注意,我得到 sum(df1$z) = 796
并且最大 y 值因此是 796/2000 = 0.398
.
作图可以用geom_step()
有阶梯函数,用geom_hline()
加水平线:
ggplot(plot_data, aes(x = x, y = cum_perc_z)) +
geom_step(colour = "red", size = 0.8) +
geom_hline(yintercept = max(plot_data$cum_perc_z))
这是我希望绘制的一些可行的数据示例:
set.seed(123)
x <- rweibull(n = 2000, shape = 2, scale = 10)
x <- round(x, digits = 0)
x <- sort(x, decreasing = FALSE)
y <- c(rep(0.1, times = 500),rep(0.25, times = 500),rep(0.4, times = 500),rep(0.85, times = 500))
z <- rbinom(n=2000, size=1, prob=y)
df1 <- data.frame(x,z)
我想绘制 z 在 x 上的总体频率。
与典型的 cdf 不同,该函数不应达到 1.0,而是
sum(df1$z)/length(df1$z)
ymax 为 0.36 (721/2000)。
使用 ggplot2
我们可以使用以下命令创建 x 的 cdf:
library(ggplot2)
ggplot(df1, aes(x)) + stat_ecdf()
但我想扩展此图以显示 z 的累积百分比(作为 'x' 的函数)
最终结果应该喜欢
编辑
通过一些非常糟糕的数据操作,我能够生成类似于 cdf 图的东西,但是必须有一个使用各种包和 ggplot 的更漂亮和简单的方法
mytable <- table(df1$x, df1$z)
mydf <- as.data.frame.matrix(mytable)
colnames(mydf) <- c("z_no", "z_yes")
mydf$A <- 1:length(mydf$z_no)
mydf$sum <- cumsum(mydf$z_yes)
mydf$dis <- mydf$sum/length(z)
plot(mydf$A, mydf$dis)
您可以使用包dplyr
处理数据如下:
library(dplyr)
plot_data <- group_by(df1, x) %>%
summarise(z_num = sum(z)) %>%
mutate(cum_perc_z = cumsum(z_num)/nrow(df1))
这给出了与您在编辑中描述的数据处理相同的结果。但是请注意,我得到 sum(df1$z) = 796
并且最大 y 值因此是 796/2000 = 0.398
.
作图可以用geom_step()
有阶梯函数,用geom_hline()
加水平线:
ggplot(plot_data, aes(x = x, y = cum_perc_z)) +
geom_step(colour = "red", size = 0.8) +
geom_hline(yintercept = max(plot_data$cum_perc_z))