R 密度图上每行的总观测数

R 密度图上每行的总观测数,r,counting,R,Counting,我想在密度图上加上每组观察的总数。 我想知道统计摘要是否可以用于此。 我试图为这个案例找到一个例子,但我找不到。只有方块图的例子。 例如,我遵循了以下示例: 使代码适应我的情况,即绘制密度图 n_fun <- function(x){ return(data.frame(y = median(x), label = paste0("n = ",length(x)))) } ggplot(mtcars, aes(x=mpg, colour=factor(

我想在密度图上加上每组观察的总数。 我想知道统计摘要是否可以用于此。 我试图为这个案例找到一个例子,但我找不到。只有方块图的例子。 例如,我遵循了以下示例:

使代码适应我的情况,即绘制密度图

n_fun <- function(x){
         return(data.frame(y = median(x), label = paste0("n = ",length(x))))
         }

ggplot(mtcars, aes(x=mpg, colour=factor(cyl))) +
geom_line(stat="density", aes(linetype=factor(cyl)), size=0.8) +
stat_summary(fun.data = n_fun, geom = "text")

n\u fun简短的回答是否定的,你不能用
stat\u summary(…)
来做这件事(虽然我已经说过了,我相信会有人来告诉你怎么做)

stat\u summary(…)
需要
x
y
美观。通常,对于给定的
x
stat\u summary(…)
使用
fun.data
为每个
x
汇总
y
,然后为每个
x
绘制结果

因此,首先,您从未指定
y
美学。其次,由于
x=mpg
每个
x
只有一个
y
。在你引用的帖子中,
x=factor(cyl)
y=mpg
,这就是为什么它在那里有效而不是在这里

第三,不清楚您想要实现什么,因为您似乎希望标签位于
y=median(mpg)
。但由于密度图产生密度,标签将全部偏离比例:

ggplot(mtcars, aes(x=mpg, colour=factor(cyl))) +
  geom_line(stat="density", aes(linetype=factor(cyl)), size=0.8) +
  stat_summary(aes(y=mpg),fun.data = n_fun, geom = "text")

注意:每个
x=mpg
都有一个标签,而且由于每个
x
只有一个
y
,所以几乎在所有情况下,
中值(x)=x
label=“n=1”
。不是很有用

以下是一种或多或少满足您需求的方法:

df.lbl       <- aggregate(mpg~cyl,mtcars, median)
df.lbl$label <- aggregate(mpg~cyl,mtcars, function(x) paste0("n = ",length(x)))[,2]
ggplot(mtcars, aes(x=mpg, colour=factor(cyl))) +
  geom_line(stat="density", aes(linetype=factor(cyl)), size=0.8) +
  geom_text(data=df.lbl, aes(label=label, y=0.05), show_guide=FALSE)

df.lbl我认为@jlhoward的答案正是你想要的。
如果你需要在同一张图中绘制多个密度,我建议在图例中而不是在绘图中包含你想要的附加信息(观察次数)。
像这样:

library(ggplot2)

df        <- mtcars
df$median <- ave(df$mpg, df$cyl, FUN=median)
df$label  <- ave(df$mpg, df$cyl, FUN=function(x)paste0("n = ",length(x)))
df$cyl_group <- paste0(df$cyl, "  (", df$label, ")")

ggplot(df, aes(x=mpg, colour=cyl_group)) +
  geom_line(stat="density", aes(linetype=cyl_group), size=0.8) 
库(ggplot2)

df我认为您的
geom_text
命令正在使用
df
,因此它在同一点多次打印标签。使用具有唯一值的
df2
表怎么样<代码>df您是对的,这会多次打印标签。更改了答案以修复该问题。