线型不重叠的条形图
Bar graph without overlap in linetype
我正在尝试制作一个包含两个分类变量的条形图,其中一个是另一个的“超集”。我想用颜色显示较小的,用线型显示较大的。
我的问题是我希望线型在每个大类中出现一次,而不是在每种颜色中出现一次。例如,在下图中,我希望实线出现一次(一起围绕红色和绿色表面,而不将它们分开),虚线出现一次(一起围绕蓝色和紫色表面)。
非常感谢任何帮助!
下面是重现附图的代码
library(tibble)
library(ggplot2)
set.seed(1234)
data <- runif(100)
cat_1 <- 1 * (data < 1/4) + 2 * (data >= 1/4 & data < 1/2) +
3 * (data >= 1/2 & data < 3/4) + 4 * (data > 3/4)
cat_2 <- (cat_1 <= 2) * 1
df <- tibble(x = data,
cat_1 = factor(cat_1),
cat_2 = factor(cat_2))
ggplot(df, aes(x = "", fill = cat_1, linetype = cat_2, color = cat_2)) +
geom_bar() +
scale_x_discrete(drop = FALSE) +
scale_linetype_manual(values = c("dotted", "solid")) +
scale_color_manual(values = c("black", "black"))
您需要重新调整 cat2 的级别,使其与 cat1 中的子集的顺序相同,然后您可以使用 group
美学,第二个 geom_bar
的 alpha 设置为0
df <- tibble(x = data,
cat_1 = factor(cat_1),
cat_2 = factor(cat_2, c(1, 0)))
ggplot(df, aes(x = "", fill = cat_1)) +
geom_bar() +
geom_bar(alpha = 0, aes(linetype = cat_2, group = cat_2),
color = "black", size = 1.5) +
scale_x_discrete(drop = FALSE) +
scale_linetype_manual(values = c("solid", "dotted")) +
scale_color_manual(values = c("black", "black")) +
theme_light(base_size = 16) +
guides(fill = guide_legend(override.aes = list(colour = NA))) +
theme(legend.key.size = unit(10, 'mm'))
我正在尝试制作一个包含两个分类变量的条形图,其中一个是另一个的“超集”。我想用颜色显示较小的,用线型显示较大的。
我的问题是我希望线型在每个大类中出现一次,而不是在每种颜色中出现一次。例如,在下图中,我希望实线出现一次(一起围绕红色和绿色表面,而不将它们分开),虚线出现一次(一起围绕蓝色和紫色表面)。
非常感谢任何帮助!
下面是重现附图的代码
library(tibble)
library(ggplot2)
set.seed(1234)
data <- runif(100)
cat_1 <- 1 * (data < 1/4) + 2 * (data >= 1/4 & data < 1/2) +
3 * (data >= 1/2 & data < 3/4) + 4 * (data > 3/4)
cat_2 <- (cat_1 <= 2) * 1
df <- tibble(x = data,
cat_1 = factor(cat_1),
cat_2 = factor(cat_2))
ggplot(df, aes(x = "", fill = cat_1, linetype = cat_2, color = cat_2)) +
geom_bar() +
scale_x_discrete(drop = FALSE) +
scale_linetype_manual(values = c("dotted", "solid")) +
scale_color_manual(values = c("black", "black"))
您需要重新调整 cat2 的级别,使其与 cat1 中的子集的顺序相同,然后您可以使用 group
美学,第二个 geom_bar
的 alpha 设置为0
df <- tibble(x = data,
cat_1 = factor(cat_1),
cat_2 = factor(cat_2, c(1, 0)))
ggplot(df, aes(x = "", fill = cat_1)) +
geom_bar() +
geom_bar(alpha = 0, aes(linetype = cat_2, group = cat_2),
color = "black", size = 1.5) +
scale_x_discrete(drop = FALSE) +
scale_linetype_manual(values = c("solid", "dotted")) +
scale_color_manual(values = c("black", "black")) +
theme_light(base_size = 16) +
guides(fill = guide_legend(override.aes = list(colour = NA))) +
theme(legend.key.size = unit(10, 'mm'))