如何在使用 facet_grid 时使 geom_rect 的阴影一致?
How to have consistent shading of geom_rect when using facet_grid?
这是我正在处理的数据:
df= structure(list(effect = c(-0.183660494380325, -0.286711283030125,
0.144420824373155, 0.107958002095135, -0.236028784063033, -0.160120624560128,
-0.241734940173219, -0.301094909534684, 0.080319901278758, 0.166386486331364,
2.18044670333557, 0.150214406648656, 0.101218219003822, -0.382893498692355,
-0.131525337511054, -0.0963503379451771, -0.266851983630642,
-0.237371391841929, -0.0718562471672148, -0.833148477215979,
-0.31532073921026, -0.666010175452128, 0.128074208388128, 0.105220228400002,
0.212888583788477, 0.173837214351567, 0.0723268793073809, 0.227657131980834,
0.219566925261995, -0.0577587298548685), lower = c(-0.378799556647341,
-0.758072446650849, 0.0273385116378299, -0.0239857116078122,
-0.595394742028366, -0.392378190445114, -1.07812282304258, -0.870284236088555,
-0.117427834790597, 0.0202865790073198, -0.0309968796929358,
-0.115160638753749, -0.0518695893701463, -1.77050833334992, -0.413234955839275,
-0.715635813448282, -0.731134011308218, -0.688660305462684, -0.743460375678667,
-1.87822726521072, -1.69792593382383, -2.31272677544801, -0.028273151895772,
-0.247721998059409, -0.0799161658359572, -0.110588127178339,
-0.114331814482118, -0.127583669808567, -0.114524635314751, -0.393815864368995
), upper = c(0.0119292041841525, 0.188761936680526, 0.261375601855666,
0.239780243784321, 0.125309603839398, 0.0726943910130132, 0.606383207664197,
0.274457379488013, 0.277860600000933, 0.31225850014966, 4.28541221179007,
0.414903371934528, 0.254152061126853, 1.06207219690377, 0.150862559742933,
0.525447262952953, 0.201162598075368, 0.217070141774486, 0.601971540143289,
0.260535057064083, 1.11526641785088, 1.10904764279685, 0.284217288085084,
0.457299344432491, 0.504523841925775, 0.45735105097433, 0.258818976847914,
0.58105825758076, 0.552088686400803, 0.278729034684897), Subject = structure(c(1L,
2L, 3L, 4L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("BIOL112_2019W1",
"CHEM100_2019W1", "CHEM121_2019W1", "PHYS100_2019W1"), class = "factor"),
item = c("Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx",
"Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx",
"Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx",
"Anx", "Anx", "Anx", "Anx", "Anx"), Dem = c("All", "All",
"All", "All", "Man", "Woman", "Man", "Woman", "Man", "Woman",
"Non-binary", "Man", "Woman", "Non-binary", "On-campus",
"<30 min", "<60 min", ">60 min", "On-campus", "<30 min",
"<60 min", ">60 min", "On-campus", "<30 min", "<60 min",
">60 min", "On-campus", "<30 min", "<60 min", ">60 min"),
cat = c("Class", "Class", "Class", "Class", "Gender", "Gender",
"Gender", "Gender", "Gender", "Gender", "Gender", "Gender",
"Gender", "Gender", "Commute", "Commute", "Commute", "Commute",
"Commute", "Commute", "Commute", "Commute", "Commute", "Commute",
"Commute", "Commute", "Commute", "Commute", "Commute", "Commute"
)), row.names = c(NA, -30L), class = "data.frame")
当我绘制 facet_grid ggplot object 并将矩形添加到 alpha =0.2 的图中时,当我的矩形有不同的 alpha 值时。我不明白为什么:
ggplot(df, aes(x=Dem) )+
theme_bw()+
geom_rect(aes(ymin = 0,ymax = 0.2,xmin = -Inf, xmax = Inf, fill = 'negligible'), alpha = .2)+
geom_rect(aes(ymin = 0.2,ymax = 0.5, xmin = -Inf, xmax = Inf, fill = 'small'), alpha = .2)+
geom_rect(aes(ymin = 0.5, ymax = 0.8,xmin = -Inf, xmax = Inf,fill = 'medium'), alpha = .2)+
geom_rect(aes(ymin = 0.8, ymax = Inf,xmin = -Inf, xmax = Inf,fill = 'large'), alpha = .2)+
geom_rect(aes(ymin = 0,ymax = -0.2,xmin = -Inf, xmax = Inf, fill = 'negligible'), alpha = .2)+
geom_rect(aes(ymin = -0.2,ymax = -0.5, xmin = -Inf, xmax = Inf, fill = 'small'), alpha = .2)+
geom_rect(aes(ymin = -0.5, ymax = -0.8,xmin = -Inf, xmax = Inf,fill = 'medium'), alpha = .2)+
geom_rect(aes(ymin = -0.8, ymax = -Inf,xmin = -Inf, xmax = Inf,fill = 'large'), alpha = .2)+
geom_point(aes(y=effect),stat="identity")+
#scale_x_discrete(position = "top") +
geom_errorbar(aes(ymin=lower, ymax=upper), width=.2)+
facet_grid(Subject~cat,scales="free")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
我希望所有矩形的 alpha 都一致为 0.2,因此它们在每个方面图上看起来都一样
问题是过度绘制。添加 geom_rect
的方式意味着为每个 (!!) 观察值或数据行绘制一个矩形,即多个矩形被绘制在彼此之上。由于观察的数量因方面而异
- 每个面绘制的矩形数各不相同
- 每个面都有不同的阴影,即观察越多,阴影越深。
为了解决您的问题,请使用矩形的坐标制作一个数据框,这也允许通过一个 geom_rect
.
添加它们
library(ggplot2)
d_rect <- data.frame(
ymin = c(0, .2, .5, .8, 0, -.2, -.5, -.8),
ymax = c(.2, .5, .8, Inf, -.2, -.5, -.8, -Inf),
xmin = -Inf,
xmax = Inf,
fill = rep(c("negligible", "small", "medium", "large"), 4)
)
ggplot(df, aes(x = Dem)) +
theme_bw() +
geom_rect(data = d_rect, aes(ymin = ymin, ymax = ymax, xmin = xmin, xmax = xmax, fill = fill), alpha = .2, inherit.aes = FALSE) +
geom_point(aes(y = effect), stat = "identity") +
# scale_x_discrete(position = "top") +
geom_errorbar(aes(ymin = lower, ymax = upper), width = .2) +
facet_grid(Subject ~ cat, scales = "free") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
由 reprex package (v2.0.0)
于 2021-06-07 创建
这是我正在处理的数据:
df= structure(list(effect = c(-0.183660494380325, -0.286711283030125,
0.144420824373155, 0.107958002095135, -0.236028784063033, -0.160120624560128,
-0.241734940173219, -0.301094909534684, 0.080319901278758, 0.166386486331364,
2.18044670333557, 0.150214406648656, 0.101218219003822, -0.382893498692355,
-0.131525337511054, -0.0963503379451771, -0.266851983630642,
-0.237371391841929, -0.0718562471672148, -0.833148477215979,
-0.31532073921026, -0.666010175452128, 0.128074208388128, 0.105220228400002,
0.212888583788477, 0.173837214351567, 0.0723268793073809, 0.227657131980834,
0.219566925261995, -0.0577587298548685), lower = c(-0.378799556647341,
-0.758072446650849, 0.0273385116378299, -0.0239857116078122,
-0.595394742028366, -0.392378190445114, -1.07812282304258, -0.870284236088555,
-0.117427834790597, 0.0202865790073198, -0.0309968796929358,
-0.115160638753749, -0.0518695893701463, -1.77050833334992, -0.413234955839275,
-0.715635813448282, -0.731134011308218, -0.688660305462684, -0.743460375678667,
-1.87822726521072, -1.69792593382383, -2.31272677544801, -0.028273151895772,
-0.247721998059409, -0.0799161658359572, -0.110588127178339,
-0.114331814482118, -0.127583669808567, -0.114524635314751, -0.393815864368995
), upper = c(0.0119292041841525, 0.188761936680526, 0.261375601855666,
0.239780243784321, 0.125309603839398, 0.0726943910130132, 0.606383207664197,
0.274457379488013, 0.277860600000933, 0.31225850014966, 4.28541221179007,
0.414903371934528, 0.254152061126853, 1.06207219690377, 0.150862559742933,
0.525447262952953, 0.201162598075368, 0.217070141774486, 0.601971540143289,
0.260535057064083, 1.11526641785088, 1.10904764279685, 0.284217288085084,
0.457299344432491, 0.504523841925775, 0.45735105097433, 0.258818976847914,
0.58105825758076, 0.552088686400803, 0.278729034684897), Subject = structure(c(1L,
2L, 3L, 4L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("BIOL112_2019W1",
"CHEM100_2019W1", "CHEM121_2019W1", "PHYS100_2019W1"), class = "factor"),
item = c("Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx",
"Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx",
"Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx", "Anx",
"Anx", "Anx", "Anx", "Anx", "Anx"), Dem = c("All", "All",
"All", "All", "Man", "Woman", "Man", "Woman", "Man", "Woman",
"Non-binary", "Man", "Woman", "Non-binary", "On-campus",
"<30 min", "<60 min", ">60 min", "On-campus", "<30 min",
"<60 min", ">60 min", "On-campus", "<30 min", "<60 min",
">60 min", "On-campus", "<30 min", "<60 min", ">60 min"),
cat = c("Class", "Class", "Class", "Class", "Gender", "Gender",
"Gender", "Gender", "Gender", "Gender", "Gender", "Gender",
"Gender", "Gender", "Commute", "Commute", "Commute", "Commute",
"Commute", "Commute", "Commute", "Commute", "Commute", "Commute",
"Commute", "Commute", "Commute", "Commute", "Commute", "Commute"
)), row.names = c(NA, -30L), class = "data.frame")
当我绘制 facet_grid ggplot object 并将矩形添加到 alpha =0.2 的图中时,当我的矩形有不同的 alpha 值时。我不明白为什么:
ggplot(df, aes(x=Dem) )+
theme_bw()+
geom_rect(aes(ymin = 0,ymax = 0.2,xmin = -Inf, xmax = Inf, fill = 'negligible'), alpha = .2)+
geom_rect(aes(ymin = 0.2,ymax = 0.5, xmin = -Inf, xmax = Inf, fill = 'small'), alpha = .2)+
geom_rect(aes(ymin = 0.5, ymax = 0.8,xmin = -Inf, xmax = Inf,fill = 'medium'), alpha = .2)+
geom_rect(aes(ymin = 0.8, ymax = Inf,xmin = -Inf, xmax = Inf,fill = 'large'), alpha = .2)+
geom_rect(aes(ymin = 0,ymax = -0.2,xmin = -Inf, xmax = Inf, fill = 'negligible'), alpha = .2)+
geom_rect(aes(ymin = -0.2,ymax = -0.5, xmin = -Inf, xmax = Inf, fill = 'small'), alpha = .2)+
geom_rect(aes(ymin = -0.5, ymax = -0.8,xmin = -Inf, xmax = Inf,fill = 'medium'), alpha = .2)+
geom_rect(aes(ymin = -0.8, ymax = -Inf,xmin = -Inf, xmax = Inf,fill = 'large'), alpha = .2)+
geom_point(aes(y=effect),stat="identity")+
#scale_x_discrete(position = "top") +
geom_errorbar(aes(ymin=lower, ymax=upper), width=.2)+
facet_grid(Subject~cat,scales="free")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
我希望所有矩形的 alpha 都一致为 0.2,因此它们在每个方面图上看起来都一样
问题是过度绘制。添加 geom_rect
的方式意味着为每个 (!!) 观察值或数据行绘制一个矩形,即多个矩形被绘制在彼此之上。由于观察的数量因方面而异
- 每个面绘制的矩形数各不相同
- 每个面都有不同的阴影,即观察越多,阴影越深。
为了解决您的问题,请使用矩形的坐标制作一个数据框,这也允许通过一个 geom_rect
.
library(ggplot2)
d_rect <- data.frame(
ymin = c(0, .2, .5, .8, 0, -.2, -.5, -.8),
ymax = c(.2, .5, .8, Inf, -.2, -.5, -.8, -Inf),
xmin = -Inf,
xmax = Inf,
fill = rep(c("negligible", "small", "medium", "large"), 4)
)
ggplot(df, aes(x = Dem)) +
theme_bw() +
geom_rect(data = d_rect, aes(ymin = ymin, ymax = ymax, xmin = xmin, xmax = xmax, fill = fill), alpha = .2, inherit.aes = FALSE) +
geom_point(aes(y = effect), stat = "identity") +
# scale_x_discrete(position = "top") +
geom_errorbar(aes(ymin = lower, ymax = upper), width = .2) +
facet_grid(Subject ~ cat, scales = "free") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
由 reprex package (v2.0.0)
于 2021-06-07 创建