У меня есть данные ниже:
data <- structure(list(individual = c("47%", "41%", "12%", "5%", NA,
"39%", "29%", "12%", "5%", NA, "44%", "39%", "28%", "31%", NA,
"60%", "59%", "26%", "36%", NA, "73%", "48%", "52%", "36%", NA,
"49%", "43%", "NA%", "3%", NA, "32%", "34%", "NA%", "2%", NA),
group = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L,
6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L), levels = c("SNs",
"SMNs", "NMSC", "Breast cancer", "Thyroid cancer", "Meningioma",
"Sarcoma"), class = "factor"), group2 = structure(c(3L, 1L,
4L, 2L, NA, 3L, 1L, 4L, 2L, NA, 3L, 1L, 4L, 2L, NA, 3L, 1L,
4L, 2L, NA, 3L, 1L, 4L, 2L, NA, 3L, 1L, 4L, 2L, NA, 3L, 1L,
4L, 2L, NA), levels = c("CCSS-All treatments", "CCSS-PRS",
"SJLIFE-All treatments", "SJLIFE-PRS"), class = "factor"),
value = c(47, 41, 12, 5, NA, 39, 29, 12, 5, NA, 44, 39, 28,
31, NA, 60, 59, 26, 36, NA, 73, 48, 52, 36, NA, 49, 43, NA,
3, NA, 32, 34, NA, 2, NA), id = 1:35, group3 = c("SJLIFE",
"CCSS", "SJLIFE", "CCSS", NA, "SJLIFE", "CCSS", "SJLIFE",
"CCSS", NA, "SJLIFE", "CCSS", "SJLIFE", "CCSS", NA, "SJLIFE",
"CCSS", "SJLIFE", "CCSS", NA, "SJLIFE", "CCSS", "SJLIFE",
"CCSS", NA, "SJLIFE", "CCSS", "SJLIFE", "CCSS", NA, "SJLIFE",
"CCSS", "SJLIFE", "CCSS", NA), group4 = c("All treatments",
"All treatments", "PRS", "PRS", NA, "All treatments", "All treatments",
"PRS", "PRS", NA, "All treatments", "All treatments", "PRS",
"PRS", NA, "All treatments", "All treatments", "PRS", "PRS",
NA, "All treatments", "All treatments", "PRS", "PRS", NA,
"All treatments", "All treatments", "PRS", "PRS", NA, "All treatments",
"All treatments", "PRS", "PRS", NA)), row.names = c(NA, -35L
), class = "data.frame")
Я хочу построить гистограмму и добавить полосу в категорию «CCSS» в группе 3 и цвет в группе 4, поэтому мне нужны две легенды. Как мне это сделать?
Это мой текущий код:
ggplot(data, aes(x=as.factor(id), y=value, fill=group4)) +
geom_bar(aes(x=as.factor(id), y=value, fill=group4), stat = "identity", alpha=1, width=0.95) +
geom_col_pattern(
aes(pattern=group3),
fill = 'white',
colour = 'black',
pattern_density = 0.5
)
Это позволит достичь желаемого результата. Возможно, вам придется настроить некоторые параметры, чтобы получить именно то, что вы хотите. Я включил неисчерпывающее количество вариантов настройки шаблонов, которые помогут вам на вашем пути.
Я отфильтровал значения «CCSS», используя dplyr::filter()
. Поскольку значения NA не отображаются на графике, я исключил их из легенды, используя scale_fill_discrete(na.translate = FALSE)
, удалите эту строку, если она не подходит.
library(dplyr) # 1.1.4
library(ggplot2) # 3.5.1
library(ggpattern) # 1.0.1
ggplot() +
geom_bar(data = data,
aes(x = as.factor(id), y = value, fill = group4),
stat = "identity",
alpha = 1,
width = 0.95) +
geom_bar_pattern(data = filter(data, group3 == "CCSS"),
aes(x = as.factor(id), y = value, pattern = group3),
stat = "identity",
fill = NA,
width = 1,
colour = 'black',
pattern_density = 0.1,
pattern_spacing = .03,
pattern_fill = NA,
pattern_colour = "black",
pattern_key_scale_factor = 0.6,
inherit.aes = FALSE) +
scale_pattern_manual(values = "stripe") +
scale_fill_discrete(na.translate = FALSE)
# Warning messages:
# 1: Removed 9 rows containing missing values or values outside the scale range
# (`geom_bar()`).