我想绘制两个分类变量(组、条件)和一个数值变量(值)。另外,我想根据值的重要性来填充颜色(重要的条应该是灰色的,其余的应该是白色的)。但是,在以下代码中,只有一些重要的条形显示为灰色。
plot <- ggplot(dat, aes(group, value))+
geom_col(aes(fill = condition), position = position_dodge(0.8), width = .7, color= "black") +
scale_fill_manual(values = ifelse(dat$significance > .05, "white", "grey")) +
geom_linerange(aes(group = condition, ymin = ci_lower, ymax= ci_upper), position = position_dodge(0.8)) +
coord_flip(ylim =c(-.2,1))
plot
这是我的数据:
dat <- structure(list(group = c("friends", "parent", "esm", "friends", "parent", "esm"),
value = c(0.25, 0.44, 0.33, 0.47, 0.25, 0.32),
significance = c(0.08, 0, 0, 0, 0.01, 0),
condition = c("S1", "S1", "S1", "S2", "S2", "S2"),
trait = c("E", "E", "E", "E", "E", "E"),
ci_lower = c(0.52, 0.74, 0.53, 0.67, 0.44, 0.49),
ci_upper = c(-0.03, 0.14, 0.14, 0.27, 0.06, 0.15)),
row.names = c(1L,2L, 3L, 16L, 17L, 18L), class = "data.frame")
答案 0 :(得分:2)
它也很有用:
library(ggplot2)
#Code
ggplot(dat, aes(group, value))+
geom_col(aes(fill = interaction(condition,significance > .05)),
position = position_dodge(0.8), width = .7, color= "black") +
scale_fill_manual(values = c("grey","grey","white"),
breaks = c('S2.FALSE','S1.TRUE'),
labels=c('S2','S1')) +
geom_linerange(aes(group = condition, ymin = ci_lower, ymax= ci_upper), position = position_dodge(0.8)) +
coord_flip(ylim =c(-.2,1))+
labs(fill='Var')
输出:
答案 1 :(得分:1)
您可以添加内联 mutate
以创建列以根据重要性指定颜色组。这里的关键是使用 group
美感,以便仍然可以根据 condition
变量对条形进行躲避和正确定位。
dat %>%
mutate(sig = significance < .05) %>%
ggplot(aes(group, value, group = condition)) +
geom_col(
aes(fill = sig),
position = position_dodge(0.8),
color = "black",
width = .7
) +
scale_fill_manual(values = c("white", "grey")) +
geom_linerange(aes(ymin = ci_lower, ymax = ci_upper),
position = position_dodge(0.8)) +
coord_flip(ylim = c(-.2, 1))
给出这个情节:
但是,我认为除了重要性之外,您还需要另一种审美来区分 condition
。颜色是一种选择,但这是使用 ggpattern
的好地方,它会比轮廓颜色更明显并保持黑白外观。
这是一个例子:
library(ggpattern)
dat %>%
mutate(sig = significance > .05) %>%
ggplot(aes(group, value, group = condition)) +
geom_col_pattern(
aes(fill = sig, pattern_angle = condition),
position = position_dodge(0.8),
pattern_fill = "black",
pattern_spacing = 0.025,
pattern = "stripe",
width = .7,
color = "black"
) +
scale_pattern_angle_discrete(range = c(45, 135)) +
scale_fill_manual(values = c("grey", "white")) +
geom_linerange(aes(ymin = ci_lower, ymax = ci_upper),
position = position_dodge(0.8)) +
coord_flip(ylim = c(-.2, 1))
这给出了这个情节:
最后,值得注意的是,条形的颜色通常不用于表示统计指标的重要性;更常见的约定是使用星号来表示相关的 p 值阈值(例如 ** p < 0.01)或使用字母来表示分组分析(例如方差分析)中的成员资格。这些可以使用 ggpubr
包轻松实现。这将使填充颜色自由以指示按 condition
分组。