如何获得ggplot中显示的x总数?

时间:2015-12-28 15:33:42

标签: r ggplot2

考虑:

x <- rnorm(100)
qplot(x)

如何在ggplot的右上角显示(N = 100)的{​​{1}}总数?

查看实际输出:

enter image description here

请参阅此示例x

enter image description here

4 个答案:

答案 0 :(得分:4)

您还可以根据数据值以编程方式设置标签的位置。 ggplot2默认为30个分箱,因此下面的代码使用30个分箱来设置标签位置的y值:

set.seed(101)
x <- rnorm(100)

qplot(x) + 
  annotate("text", label=paste0("N = ", length(x)), x=max(x), y=max(table(cut(x, 30))))

qplot(x) + 
  geom_text(aes(label=paste0("N = ", length(x)), x=max(x), y=max(table(cut(x, 30)))))

更新:要解决您的评论,请使用离散x向量绘制。现在,如果我们仍然希望文本的y位置达到最大值,我们再次找到具有最大计数的类别。数据已经是离散的,因此我们只需要y=max(table(x))。对于x位置,如果我们希望标签处于最大x值,我们需要唯一x类别的数量,因为ggplot隐含地将这些从1到N编号(其中N是类别的数量)。 unique函数返回包含每个唯一类别的向量。我们只需要这个向量的长度来获得图中的最大x值:x=length(unique(x))

set.seed(101)
x <- cut(rnorm(100), 5)

qplot(x) + 
  geom_text(aes(label=paste0("N = ", length(x)), x=length(unique(x)), y=max(table(x))))

答案 1 :(得分:2)

很多方法。 geom_text是最常用的工具。对于一次性标签,可能是annotate

qplot(x) + 
   annotate("text",x = Inf,y = Inf,label = "N = 100",hjust = 1.5,vjust = 1.5)

答案 2 :(得分:2)

其他答案显示了如何将文本添加到绘图中。但annotate()也可用于添加其他geom。例如,如果要将注释放在矩形内,可以执行以下操作:

x0 <- max(x)
y0 <- max(table(cut(x, 30)))

qplot(x) + 
   annotate("rect", xmin = x0*.8, xmax = x0*1.2, ymin = y0*.95, ymax = y0*1.05,
            fill = "white", colour = "black") +
   annotate("text", label = paste0("N = ", length(x)), x = x0, y = y0)

给出了

enter image description here

直到以annotate("rect",开头的行,所有内容都取自此问题的其他答案。

答案 3 :(得分:1)

喜欢这个? (以下代码)

enter image description here

# install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)

set.seed(421)
x <- rnorm(100)
qplot(x) + annotate("text", x = 2, y = 15, label = paste("N =", length(x)))