Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将注释放置在y轴上带有TRUE和FALSE的ggplot上_R_Ggplot2 - Fatal编程技术网

将注释放置在y轴上带有TRUE和FALSE的ggplot上

将注释放置在y轴上带有TRUE和FALSE的ggplot上,r,ggplot2,R,Ggplot2,下面的代码做了我需要的两个简化图,但是需要y位置的幻数,而不是计算(注释掉) df1函数getYplace做你想做的事。它检查向量是否为真/假并返回1.5,或者是否为数字,然后返回两个数字之间的平均值 getYplace <- function(Y) { if (is.numeric(Y)) { res <- mean(unique(Y)) } else { res <- 1.5 } return(res) }

下面的代码做了我需要的两个简化图,但是需要y位置的幻数,而不是计算(注释掉)


df1函数
getYplace
做你想做的事。它检查向量是否为真/假并返回
1.5
,或者是否为数字,然后返回两个数字之间的平均值

getYplace <- function(Y) {
    if (is.numeric(Y)) {
        res <- mean(unique(Y))
    } else {
        res <- 1.5
    }
    return(res)
}

library(ggplot2)
ggplot(df1, aes(x, y)) + 
    geom_point() +
    annotate("text", label = "read me", x = mean(df1$x), y = getYplace(df1$y))

ggplot(df2, aes(x, y)) + 
    geom_point() +
    annotate("text", label = "read me", x = mean(df2$x), y = getYplace(df2$y))

getYplace我相信确定注释的y值将与前面提到的因子平均值一样有效,只要它们是数值。如果它们不是数字,则因子将被分配计数编号,1,2,3

所以下面的方法可能适用于所有两个因子向量,但我觉得它不是很优雅,并且计算了两次丑陋的平均值

yplace1 = if(is.na(mean(as.numeric(levels(as.factor(df1$y))))))
    1.5
else
    mean(as.numeric(levels(as.factor(df1$y))))

我希望你不介意,我发现is.logical()和unique()非常有用,所以我调整了你的条件以涵盖所有情况,而不仅仅是逻辑。@mightyple哦,我明白了,很乐意帮忙:-)
yplace1 = if(is.na(mean(as.numeric(levels(as.factor(df1$y))))))
    1.5
else
    mean(as.numeric(levels(as.factor(df1$y))))