在R中创建一个框图,用于标记样本大小(N)的框

J M*_*ler 16 plot label r graph boxplot

有没有办法在R中创建一个框图,它将在框中显示(某处)"N =(样本大小)"?varwidth logical根据样本大小调整框的宽度,但不允许在不同的图之间进行比较.

FWIW,我以下列方式使用boxplot命令,其中'f1'是一个因素:

boxplot(xvar ~ f1, data=frame, xlab="input values", horizontal=TRUE)
Run Code Online (Sandbox Code Playgroud)

JoF*_*wld 28

这是一些ggplot2代码.它将在样本均值处显示样本大小,使标签多功能化!

首先,一个简单的功能 fun.data

give.n <- function(x){
   return(c(y = mean(x), label = length(x)))
}
Run Code Online (Sandbox Code Playgroud)

现在,用钻石数据来证明

ggplot(diamonds, aes(cut, price)) + 
   geom_boxplot() + 
   stat_summary(fun.data = give.n, geom = "text")
Run Code Online (Sandbox Code Playgroud)

您可能需要使用文本大小来使其看起来很好,但现在您有一个样本大小的标签,这也给出了倾斜感.

  • 如果我正在使用`geom_boxplot(aes(fill = factor(f2))),其中f2是第二个因素,那么如果在stat_summary上有一个变量允许'子盒'接收它们自己的N? (5认同)
  • 节省空间的示例代码:`ggplot(mpg,aes(制造商,hwy,fill = factor(年)))+ geom_boxplot()+ stat_summary(fun.data = give.n,geom ="text",position = position_dodge( height = 0,width = 0.75),size = 3)`你可能需要手动调整`position_dodge()中传递给`width`的值. (3认同)
  • 立场说“未使用的论点”。我想知道是否可以改变 N 计数的位置,因为它不容易在箱线图中出现。谢谢 (2认同)

nic*_*ico 10

您可以使用该names参数写入n每个因子名称的旁边.

如果你不想n自己计算,你可以使用这个小技巧:

# Do the boxplot but do not show it
b <- boxplot(xvar ~ f1, data=frame, plot=0)
# Now b$n holds the counts for each factor, we're going to write them in names
boxplot(xvar ~ f1, data=frame, xlab="input values", names=paste(b$names, "(n=", b$n, ")"))
Run Code Online (Sandbox Code Playgroud)


Din*_*esh 5

要获得该n栏的顶部,可以使用boxplot提供textstat详细信息,如下所示

b <- boxplot(xvar ~ f1, data=frame, plot=0)
text(1:length(b$n), b$stats[5,]+1, paste("n=", b$n))
Run Code Online (Sandbox Code Playgroud)

b的stats字段是一个矩阵,每列包含一个组/图的下晶须的极值,下铰链,中位数,上铰链和上晶须的极值。