R ggplot stat_summary:如何在图例中包含NA的数量?

时间:2014-10-20 06:13:11

标签: r graph na

我试图在x轴上绘制一个离散变量,而在y轴上绘制一个连续变量。想象一下在mtcars中我试图绘制cyl与disp的关系。如果disp的某些值是NA,该怎么办?我想知道cyl的每个值有多少NA,并在一个简单的表格中显示,可能在图例下方(或在图例本身内)。有一种简单(或复杂)的方法吗?

我提出的类似相关问题:R - looking at means by subgroup and overall on a line graph

谢谢!

1 个答案:

答案 0 :(得分:0)

这个答案并不能满足所有问题的要求,但由于有关数据应该如何准确呈现的细节有点模糊,我还是会发帖。

所以这是一种向传奇本身添加NA计数的方法:

library(datasets)
mycars <- mtcars
mycars$disp[c(1,2,3)] <- NA

lvls = levels(as.factor(mycars$cyl))
nacounts <- by(mycars, mycars$cyl, function(x) sum(is.na(x$disp)))
labels = paste(lvls," (NA=",as.integer(nacounts),")",sep="")

ggplot(data=mycars) +
   geom_boxplot(aes(x=cyl,y=disp, fill=as.factor(cyl)))  +
   scale_fill_discrete(name="Cyl", labels=labels)

Result

修改

与问题中提到的stat_summary图有关:可以使用scale_linetype_ *函数添加描述线类型的标签。

如果你想拥有与上图相同的图例,我想你必须添加描述cyl的图元素,例如:

ggplot(mycars,aes(cyl,disp)) +
  stat_summary(fun.y=mean, geom="line", lwd=1.5) +
  stat_summary(aes(lty=factor(vs)),fun.y="mean",geom="line") +
  stat_summary(aes(color=factor(cyl)),fun.y="mean",geom="point",size=5) +
  scale_x_continuous(breaks=c(4,6,8),labels=c("four","6","8")) +
  scale_color_discrete(labels=labels)

plot with point geometry overlay