我试图弄清楚如何仅对组图中的某些成员绘制误差线。例如,我有一个定义为的数据集:
new_frame <- data.frame(Parms = c("CAGR", "CAGR", "CAGR",
"CAGR", "CAGR", "DD", "DD",
"DD","DD","DD"),
Values = c(28, 27.4, 26.9, 24.6, 27.9,
18.7, 19.2, 18.5, 19.2, 19.1),
Rebal = c(18, 19, 20, 21, 22,
18, 19, 20, 21, 22),
sd = c(2.8, 2.3, 1.9, 2.9, 2.1, 0,0,0,0,0))
给出了new_frame:
Parms Values Rebal sd
1 CAGR 28.0 18 2.8
2 CAGR 27.4 19 2.3
3 CAGR 26.9 20 1.9
4 CAGR 24.6 21 2.9
5 CAGR 27.9 22 2.1
6 DD 18.7 18 0.0
7 DD 19.2 19 0.0
8 DD 18.5 20 0.0
9 DD 19.2 21 0.0
10 DD 19.1 22 0.0
我的ggplot2语句是:
library(ggplot2)
ggplot(new_frame, aes(x=Rebal, y=Values, fill=Parms)) +
geom_bar(position="dodge", stat="identity") +
geom_errorbar(aes(ymin=Values - sd, ymax=Values + sd),
position=position_dodge(0.9), width=0.2) +
ggtitle(" Variation With Rebalance Period”)
和情节是:
我的问题是如何避免绘制绿色条的空错误刻度。在DD的sd值的new_frame中输入0仍会绘制刻度线,而将NA插入这些位置会引发ggplot错误。
答案 0 :(得分:2)
您可以在geom_errorbar
到value == 0
的地方设置NA
的颜色:
ggplot(new_frame, aes(Rebal, Values, fill = Parms)) +
geom_bar(position = "dodge", stat = "identity") +
geom_errorbar(aes(ymin = Values - sd, ymax = Values + sd,
# Is SD 0 (returns logical value)
color = sd == 0),
position = position_dodge(0.9), width = 0.2) +
# Set 0 SD color to NA
scale_color_manual(values = c("black", NA), guide = FALSE)
答案 1 :(得分:1)
将0值设置为NA
:
# in the data
new_frame$sd[new_frame$sd == 0] = NA
# or inline
aes(ymin = Values - ifelse(sd == 0, NA, sd), ymax = Values + ifelse(sd == 0, NA, sd))
默认情况下,这将引发警告。您可以通过将参数na.rm = TRUE
添加到geom_errorbar
层来禁用警告:
geom_errorbar(
aes(ymin = Values - sd, ymax = Values + sd),
na.rm = T,
position = position_dodge(0.9),
width = 0.2
)
我很欣赏聪明的color = sd == 0
方法,但这是一种更通用的方法,它不依赖于所使用的其他美学。 (例如,如果您为错误栏映射了color
美学,那么您需要为该工作方法选择不同的美学。)