我有以下数据:
我通过这样做绘制了条形图:
ggplot(data=test_mod3, aes(x = as.factor(realDist), y = 1-value, fill=as.factor(clusteringDistance), width=0.75 ) ) +
stat_summary( fun.y=mean, geom="bar", width=0.1, color="black", size=0.2, position=position_dodge(width = 0.90) ) +
stat_summary( fun.data=mean_cl_normal,geom="errorbar", width=0.35, size=0.3, position=position_dodge(width = 0.90))
这给了我以下栏:
我希望所有的条形图都相同,但是x=100
没有条形图。因此,x = 100出现的唯一条形应与其他条形相同
为了达到这个目的,我尝试了类似的东西:
rd_100 <- c(100, 100, 100, 100, 100)
val_100 = c(1,1,1,1,1)
cd_100 = c(200,300,400,500,550)
df_100 = data.frame(rd_100, val_100, cd_100)
names(df_100) <- names(test_mod2)
test_mod2 <- rbind(test_mod2, df_100)
然而这给了我很大的置信区间,但宽度还可以......
使用stat_summary()
时,还有其他方法可以使用相等的宽度条吗?
答案 0 :(得分:2)
你可以通过刻面来实现与你正在寻找的东西接近的东西:
ggplot(data=test_mod3, aes(x = as.factor(clusteringDistance), y = 1-value, fill=as.factor(clusteringDistance), width=0.75 ) ) +
stat_summary( fun.y=mean, geom="bar", width=0.1, color="black", size=0.2, position=position_dodge(width = 0.90) ) +
stat_summary( fun.data=mean_cl_normal,geom="errorbar", width=0.35, size=0.3, position=position_dodge(width = 0.90)) +
facet_grid(. ~ realDist)
答案 1 :(得分:2)
我们不是使用stat_summary
在ggplot2内部进行汇总,而是预先计算这些值,我们会将realDist = 100的缺失组添加为NA,以便以后达到相同的宽度。
首先,我们使用dplyr
对数据进行分组,并使用mean_cl_normal
按平均值和人口均值的下限和上限进行汇总。
library(dplyr)
df <- test_mod3 %>%
group_by(realDist, clusteringDistance) %>%
summarise(mean = mean(value), ymin = mean_cl_normal(value)$ymin,
ymax = mean_cl_normal(value)$ymax)
输出:
realDist clusteringDistance mean ymin ymax
1 10 100 0.9997100 0.9996082 0.9998118
2 10 200 0.9963526 0.9959486 0.9967567
3 10 300 0.9860415 0.9850053 0.9870777
4 10 400 0.9711180 0.9695458 0.9726903
5 10 500 0.9496824 0.9471561 0.9522088
6 10 550 0.9632924 0.9606701 0.9659147
7 100 100 0.9877920 0.9867590 0.9888251
然后我们照顾失踪的群体。我们会创建realDist
和clusteringDistance
的所有组合。
df <- rbind(df, cbind(expand.grid(realDist = levels(as.factor(df$realDist)),
clusteringDistance = levels(as.factor(df$clusteringDistance))),
mean = NA, ymin = NA, ymax = NA))
输出:
realDist clusteringDistance mean ymin ymax
1 10 100 0.9997100 0.9996082 0.9998118
2 10 200 0.9963526 0.9959486 0.9967567
3 10 300 0.9860415 0.9850053 0.9870777
4 10 400 0.9711180 0.9695458 0.9726903
5 10 500 0.9496824 0.9471561 0.9522088
6 10 550 0.9632924 0.9606701 0.9659147
7 100 100 0.9877920 0.9867590 0.9888251
8 10 100 NA NA NA
9 100 100 NA NA NA
10 10 200 NA NA NA
11 100 200 NA NA NA
12 10 300 NA NA NA
13 100 300 NA NA NA
14 10 400 NA NA NA
15 100 400 NA NA NA
16 10 500 NA NA NA
17 100 500 NA NA NA
18 10 550 NA NA NA
19 100 550 NA NA NA
最后,我们使用geom_bar
和stat = "identity"
geom_errorbar
绘制数据
ggplot(data=df, aes(x = as.factor(realDist), y = 1-mean, fill=as.factor(clusteringDistance), width=0.75 )) +
geom_bar(stat = "identity", position=position_dodge(width = 0.90), color="black", size=0.2)+
geom_errorbar(aes(ymin=1-ymin, ymax=1-ymax), width=.35, size=0.3, position=position_dodge(.9))
答案 2 :(得分:0)
这是一个快速入侵,无法扩展。您需要为y变量使用NA添加缺少因子级别组合的条目。
for (i in c(200,300,400,500,550)) {
test_mod3 = rbind(test_mod3, c(100,NA,i))
}