我正在使用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)。是否有一种优雅的方式来做到这一点?
答案 0 :(得分:3)
正如@MLavoie在评论中建议的那样,为文本标签生成一个新的数据框,然后使用它。这应该适用于您的目的:
NAdf<-df3 %>%
group_by(name) %>%
summarise(ycoor=5,
xcoor=5,
num_NA=sum(is.na(value)))
回应下面的评论。一般来说,我发现将文本标签放入一个相当挑剔的刻面图中。在您的示例中,您可以简单地将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)