r - 包括 ggplot 中缺失值的数量

标签 r ggplot2

我使用 ggplot2 来绘制不同的时间序列(一个用于 Alice,一个用于 Bob,一个用于 Eve),这些时间序列具有不同数量的缺失值。

require('ggplot2')
df3 <-  data.frame(name=c(rep("Alice",10),rep("Bob",10),rep("Eve",10)),value=c(seq(1,10), seq(4,13), seq(5,14)), time=rep(seq(1,10),3))
df3$value[c(3,4,15,16,17,22,23,24,25)]<- NA
ggplot(data=df3, aes(time, value)) + 
  geom_line() + 
  geom_point() + facet_wrap(~ name, nrow=1)

我希望在每个图中显示 NA 的计数,例如作为数字的叠加(2 代表 Alice,3 代表 Bob,4 代表 Eve)。有没有一种优雅的方法来做到这一点?

最佳答案

正如 @MLavoie 在评论中建议的那样,为文本标签生成一个新的数据框,然后使用它。这应该适合您的目的:

require('ggplot2')
require('dplyr')

df3 <-      data.frame(name=c(rep("Alice",10),rep("Bob",10),rep("Eve",10)),value=c(seq(1,10), seq(4,13), seq(5,14)), time=rep(seq(1,10),3))
df3$value[c(3,4,15,16,17,22,23,24,25)]<- NA

NAdf<-df3 %>%
  group_by(name) %>%
  summarise(ycoor=mean(value, na.rm=TRUE),
            xcoor=mean(time, na.rm=TRUE),
            num_NA=sum(is.na(value)))  


ggplot(data=df3, aes(time, value)) + 
 geom_line() + 
 geom_point() + 
 geom_text(data=NAdf, aes(x=xcoor, y=ycoor, label=paste(num_NA,"for",name))) +
 facet_wrap(~ name, nrow=1) 

enter image description here HTH

已更新

回应下面的评论。一般来说,我发现将文本标签放入多面图中相当挑剔。在您的示例中,您可以简单地将所有面板的 x 和 y 坐标定义为 5,5,如下所示:

NAdf<-df3 %>%
  group_by(name) %>%
  summarise(ycoor=5,
            xcoor=5,
            num_NA=sum(is.na(value)))  

然后您可以使用与之前相同的代码进行绘图:

 ggplot(data=df3, aes(time, value)) + 
 geom_line() + 
 geom_point() + 
 geom_text(data=NAdf, aes(x=xcoor, y=ycoor, label=paste(num_NA,"for",name))) +
 facet_wrap(~ name, nrow=1)

问题在于它不是一个通用的解决方案。但在实践中,我发现您每次都需要摆弄 geom_text 绘图坐标才能使其正确。说实话,@Sam Dickson 的解决方案对于这个特定问题来说非常优雅。

关于r - 包括 ggplot 中缺失值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34685426/

相关文章:

r - 将 ggplotly 和 ggplot 与拼凑而成?

R ggplot2 geom_smooth 不添加负值

r - R中的单向哈希函数

r - 是否可以在 R 包的 'data' 子目录中包含文本文件

r - 在 R 中创建 map 时如何指定国家/地区?

r - 多面ggplot中轴文本的条件格式

r - 有关 ggplot2 中缺失美学的更多信息

r - 为什么 tidyr `complete()` 没有在 R 中完成?

r - 导出/导入 RStudio 用户首选项、全局设置等

r - 如何在ggplot2中更改自定义图例中的线条角度