在ggplot中包含缺失值的数量

时间:2016-01-08 20:22:12

标签: 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,鲍勃3,夏娃4)。是否有一种优雅的方式来做到这一点?

2 个答案:

答案 0 :(得分:3)

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

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

enter image description here HTH

更新

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

 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)

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

$required_fields = array('name', 'surname', 'email', 'password', 'confirm_password');
$wrong_chars = "0123456789!@#$%^&*()+=-[]';,./{}|:<>?~";

foreach($required_fields as $field) {
        if($_POST[$field] == '') {
          $errors[] = "All Fields are required.";
          break;
        }
    }   

     if(empty($errors)) {
         if(strpbrk($name,$wrong_chars) !== false) {
           $errors[] = "You can't use special characters on field: Name.";  
         }
         else if(strpbrk($surname,$wrong_chars) !== false){
             $errors[] = "You can't use special characters on field: Surame.";
         }
     }

这个问题是它不是一个通用的解决方案。在实践中,虽然我发现你需要每次都使用你的geom_text绘图坐标以使其恰到好处。说实话@Sam Dickson的解决方案对于这个特殊问题非常优雅。

答案 1 :(得分:2)

一个选项是将计数添加到分面中使用的变量:

<?php echo $this->getChildHtml('description') ?>

enter image description here