r - 如何绘制具有不同行数的向量的多个 CDF 图

标签 r ggplot2 cdf ecdf

我想在同一个图中绘制多个变量的 CDF 图。变量的长度不同。为了简化细节,我使用以下示例代码:

library("ggplot2")

a1 <- rnorm(1000, 0, 3)
a2 <- rnorm(1000, 1, 4)
a3 <- rnorm(800, 2, 3)

df <- data.frame(x = c(a1, a2, a3),ggg = gl(3, 1000))
ggplot(df, aes(x, colour = ggg)) + stat_ecdf()+ coord_cartesian(xlim = c(0, 3)) + scale_colour_hue(name="my legend", labels=c('AAA','BBB', 'CCC'))

可以看到,a3的长度为800,与a1、a2不同。
当我运行代码时,它显示:
> df <- data.frame(x = c(a1, a2, a3),ggg = gl(3, 1000))
Error in data.frame(x = c(a1, a2, a3), ggg = gl(3, 1000)) : 
arguments imply differing number of rows: 2800, 3000
> ggplot(df, aes(x, colour = ggg)) + stat_ecdf()+ coord_cartesian(xlim = c(0, 3)) +    scale_colour_hue(name="my legend", labels=c('AAA','BBB', 'CCC'))
Error: ggplot2 doesn't know how to deal with data of class function

那么,如何使用 ggplot2 在同一图中绘制长度不同的不同变量的 cdf 图?期待帮助!

最佳答案

您是对的,ggplot 确实似乎希望每组中的计数数量相同。所以而不是使用 stat_ecdf ,也许你可以自己计算一下

library(ggplot2)

a1 <- rnorm(1000, 0, 3)
a2 <- rnorm(1000, 1, 4)
a3 <- rnorm(800, 2, 3)

df <- data.frame(x = c(a1, a2, a3),ggg = factor(rep(1:3, c(1000,1000,800))))

df <- df[order(df$x), ]
df$ecdf <- ave(df$x, df$ggg, FUN=function(x) seq_along(x)/length(x))

ggplot(df, aes(x, ecdf, colour = ggg)) + geom_line() + scale_colour_hue(name="my legend", labels=c('AAA','BBB', 'CCC'))

请注意,您使用的是 gl()错误地;您的代码假设所有三个组也有 1000 个条目。在这里,我已将其更改为 rep()以获得每组正确数量的标签。

ecdf pggplot

关于r - 如何绘制具有不同行数的向量的多个 CDF 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23714082/

相关文章:

r - 将 purrr::walk2() 应用于管道末端的 data.frames 的 data.frame

r - ggplot2 主题选项列表?

c - 并行效率下降不一致

python - scikit learn-如何获得高斯混合模型的 cdf?

python - 在 Python 中读取文件并绘制 CDF

r - 对数刻度上的 Shiny slider

r - 在 ggplot 分面条标签中使用与号

r - bool 运算中的 dplyr row_number() 行为

r - 使用ggplot2为树状图中的群集着色

r - 如何按特定组和频率顺序对条形图重新分组