复制ggplot2 geom_linerange()示例

复制ggplot2 geom_linerange()示例,r,ggplot2,R,Ggplot2,我正在尝试制作一个最终看起来像这样的情节: > str(outbtu) 'data.frame': 86400 obs. of 2 variables: $ bias: num -0.248 -0.759 -0.471 -0.304 -0.358 ... $ cnd : int 1 1 1 1 1 1 1 1 1 1 ... > outbtu[1:10,] bias cnd 1 -0.24756150 1 2 -0.75906264 1

我正在尝试制作一个最终看起来像这样的情节:

> str(outbtu)
'data.frame':   86400 obs. of  2 variables:
 $ bias: num  -0.248 -0.759 -0.471 -0.304 -0.358 ...
 $ cnd : int  1 1 1 1 1 1 1 1 1 1 ...
> outbtu[1:10,]
          bias cnd
1  -0.24756150   1
2  -0.75906264   1
3  -0.47142178   1
4  -0.30395184   1
5  -0.35756559   1
6   0.04072695   1
7  -0.45026249   1
8  -0.20509166   1
9  -0.24816174   1
10 -0.01581920   1
但是,我希望每行的端点代表每组数字底部的第25个百分位和顶部的第75个百分位。中间的点应该是中位数。我可以用geom_箱线图从这些数据中绘制箱线图,但我认为这样看起来会更好。不管怎样,我做不到。现在我收到以下错误消息:

Warning message:
In data.frame(x = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  :
  row names were found from a short variable and have been discarded
我的数据如下所示:

> str(outbtu)
'data.frame':   86400 obs. of  2 variables:
 $ bias: num  -0.248 -0.759 -0.471 -0.304 -0.358 ...
 $ cnd : int  1 1 1 1 1 1 1 1 1 1 ...
> outbtu[1:10,]
          bias cnd
1  -0.24756150   1
2  -0.75906264   1
3  -0.47142178   1
4  -0.30395184   1
5  -0.35756559   1
6   0.04072695   1
7  -0.45026249   1
8  -0.20509166   1
9  -0.24816174   1
10 -0.01581920   1
其中,cnd最终达到27,但27个cnd值中的每一个都有3200个观测值,所以这里看不到它。我想在这张图上画27条线段,其中一条对应27个cnd值的偏差变量的第25、50和75个百分位

这是我的密码:

p <- ggplot(outbtu,aes(factor(cnd),bias,
                   ymin=quantile(bias,.25),
                   ymax=quantile(bias,.75)))
p <- p + geom_linerange()
p + geom_pointrange()

老实说,我不知道我是否已经接近了,这正是我可以从ggplot帮助页面中了解到的。提前谢谢

您需要分别计算所有统计数据,然后绘制获得的中值和分位数值。否则,ymin=quantilebias,.25返回比factorcnd更大的向量

这里有一个例子

# Generate sample data
df <- data.frame(a=rnorm(100), b=sample(1:5, 100, replace=T))
# Calculate statistics for each group of b values
df2 <- t(sapply(unique(df$b), function(x) {
  s <- summary(df[df$b == x, "a"])[c(2,3,5)]
  c(x, s)
}))
# Convert output matrix to data.frame since ggplot works only with data.frames
df2 <- as.data.frame(df2)
# Rename column names for clarity
colnames(df2) <- c("b", "Q1", "Median", "Q3")
# Draw obtained values
ggplot(df2, aes(x=b, y=Median, ymin=Q1, ymax=Q3)) + geom_pointrange()

您需要分别计算所有统计数据,然后绘制获得的中值和分位数值。否则,ymin=quantilebias,.25返回比factorcnd更大的向量

这里有一个例子

# Generate sample data
df <- data.frame(a=rnorm(100), b=sample(1:5, 100, replace=T))
# Calculate statistics for each group of b values
df2 <- t(sapply(unique(df$b), function(x) {
  s <- summary(df[df$b == x, "a"])[c(2,3,5)]
  c(x, s)
}))
# Convert output matrix to data.frame since ggplot works only with data.frames
df2 <- as.data.frame(df2)
# Rename column names for clarity
colnames(df2) <- c("b", "Q1", "Median", "Q3")
# Draw obtained values
ggplot(df2, aes(x=b, y=Median, ymin=Q1, ymax=Q3)) + geom_pointrange()

感谢您对将计算与绘图说明分离的说明。将来肯定会有帮助的!感谢您对将计算与绘图说明分离的说明。将来肯定会有帮助的!请给我澄清一点-我发现如果我从你发布的较短示例中省略conf.int=0.5,那么情节就会变得一团糟。这真的是在告诉ggplot-to-plot置信区间宽度为50%吗?我不明白这将如何与四分位数的东西相匹配-它们看起来像两个完全不同的概念-这是在做其他事情吗?从包Hmisc where?median_hilow指向:对于smedian.hilow,conf.int是外部分位数应该瞄准的覆盖概率。当使用默认值0.95时,计算的下分位数和上分位数分别为0.025和0.975。我明白了,因此conf.int=0.5告诉median_hilow包含分布的中间50%,当在两个端点之间分割时,它最终成为第25个百分位和第75个百分位。再次感谢你!!请给我澄清一点-我发现如果我从你发布的较短示例中省略conf.int=0.5,那么情节就会变得一团糟。这真的是在告诉ggplot-to-plot置信区间宽度为50%吗?我不明白这将如何与四分位数的东西相匹配-它们看起来像两个完全不同的概念-这是在做其他事情吗?从包Hmisc where?median_hilow指向:对于smedian.hilow,conf.int是外部分位数应该瞄准的覆盖概率。当使用默认值0.95时,计算的下分位数和上分位数分别为0.025和0.975。我明白了,因此conf.int=0.5告诉median_hilow包含分布的中间50%,当在两个端点之间分割时,它最终成为第25个百分位和第75个百分位。再次感谢你!!