复制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个百分位。再次感谢你!!