ggplot:分组条形图 - 每组的 alpha 值和图例
ggplot: grouped bar plot - alpha value & legend per group
我有两个数据点的数据用于观察(由 res
中唯一的 pty
/time
组合表示),我想将其绘制为条形图。
考虑这个玩具数据:
df <- data.frame(pty = c("A","A","B","B","C","C"),
print_col = c("#FFFF00", "#FFFF00", "#000000", "#000000", "#ED1B34", "#ED1B34"),
time = c(2020,2016,2020,2016,2020,2016),
res = c(20,35,30,35,40,45))
我正在使用 ggplot(df) + geom_bar(aes(pty, res , fill = as.factor(pty), group=as.factor(time)), position = "dodge", stat = "summary" , fun = "mean")
绘制此图,结果如下(见下文)。
但是,我想改变两件事:
- 着色:(i) 条形颜色应从相应行的
print_col
列中获取,并且 (ii) 对于 time==2016
,我想要一个 alpha
值 .5
为了更好的可读性。
- 图例:
fill
图例是不必要的。相反,我想要 group
的图例(即“时间”作为标题,“2020”/“2016”作为条目)。
我想不出实现这些的方法 - 有人能给我指出正确的方向吗?
添加 alpha 就像将列映射到 alpha
美学一样简单,默认情况下会为您提供图例。使用 fill = I(print_col)
自动设置 'identity' 填充比例,默认隐藏图例。
library(ggplot2)
df <- data.frame(pty = c("A","A","B","B","C","C"),
print_col = c("#FFFF00", "#FFFF00", "#000000", "#000000", "#ED1B34", "#ED1B34"),
time = c(2020,2016,2020,2016,2020,2016),
res = c(20,35,30,35,40,45))
ggplot(df) +
geom_bar(aes(pty, res, fill = I(print_col), group = time,
alpha = as.factor(time)),
position = "dodge", stat = "summary", fun = "mean") +
# You can tweak the alpha values with a scale
scale_alpha_manual(values = c(0.3, 0.7))
由 reprex package (v2.0.1)
创建于 2022-03-09
另一种方法是将 alpha 添加到数据集并在 alpha
参数中调用它。在 scale_alpha()
中,我隐藏了图例,这样您就不必看到两个图例,只保留原始示例中的一个。我还将 scale_fill_manual()
.
中的颜色称为唯一值
library(ggplot2)
library(dplyr)
df <- data.frame(pty = c("A","A","B","B","C","C"),
print_col = c("#FFFF00", "#FFFF00", "#000000", "#000000", "#ED1B34", "#ED1B34"),
time = c(2020,2016,2020,2016,2020,2016),
res = c(20,35,30,35,40,45))
df <- mutate(df, alph = ifelse(time ==2016 , .5,1))
ggplot(df) +
geom_bar(aes(pty, res , fill = as.factor(pty), group=as.factor(time), alpha = alph),
position = "dodge", stat = "summary" , fun = "mean")+
scale_fill_manual("pty", values = unique(df$print_col))+
scale_alpha(guide = "none")
我有两个数据点的数据用于观察(由 res
中唯一的 pty
/time
组合表示),我想将其绘制为条形图。
考虑这个玩具数据:
df <- data.frame(pty = c("A","A","B","B","C","C"),
print_col = c("#FFFF00", "#FFFF00", "#000000", "#000000", "#ED1B34", "#ED1B34"),
time = c(2020,2016,2020,2016,2020,2016),
res = c(20,35,30,35,40,45))
我正在使用 ggplot(df) + geom_bar(aes(pty, res , fill = as.factor(pty), group=as.factor(time)), position = "dodge", stat = "summary" , fun = "mean")
绘制此图,结果如下(见下文)。
但是,我想改变两件事:
- 着色:(i) 条形颜色应从相应行的
print_col
列中获取,并且 (ii) 对于time==2016
,我想要一个alpha
值.5
为了更好的可读性。 - 图例:
fill
图例是不必要的。相反,我想要group
的图例(即“时间”作为标题,“2020”/“2016”作为条目)。
我想不出实现这些的方法 - 有人能给我指出正确的方向吗?
添加 alpha 就像将列映射到 alpha
美学一样简单,默认情况下会为您提供图例。使用 fill = I(print_col)
自动设置 'identity' 填充比例,默认隐藏图例。
library(ggplot2)
df <- data.frame(pty = c("A","A","B","B","C","C"),
print_col = c("#FFFF00", "#FFFF00", "#000000", "#000000", "#ED1B34", "#ED1B34"),
time = c(2020,2016,2020,2016,2020,2016),
res = c(20,35,30,35,40,45))
ggplot(df) +
geom_bar(aes(pty, res, fill = I(print_col), group = time,
alpha = as.factor(time)),
position = "dodge", stat = "summary", fun = "mean") +
# You can tweak the alpha values with a scale
scale_alpha_manual(values = c(0.3, 0.7))
由 reprex package (v2.0.1)
创建于 2022-03-09另一种方法是将 alpha 添加到数据集并在 alpha
参数中调用它。在 scale_alpha()
中,我隐藏了图例,这样您就不必看到两个图例,只保留原始示例中的一个。我还将 scale_fill_manual()
.
library(ggplot2)
library(dplyr)
df <- data.frame(pty = c("A","A","B","B","C","C"),
print_col = c("#FFFF00", "#FFFF00", "#000000", "#000000", "#ED1B34", "#ED1B34"),
time = c(2020,2016,2020,2016,2020,2016),
res = c(20,35,30,35,40,45))
df <- mutate(df, alph = ifelse(time ==2016 , .5,1))
ggplot(df) +
geom_bar(aes(pty, res , fill = as.factor(pty), group=as.factor(time), alpha = alph),
position = "dodge", stat = "summary" , fun = "mean")+
scale_fill_manual("pty", values = unique(df$print_col))+
scale_alpha(guide = "none")