我有一个包含 3 个变量的图表。我有两个传奇。在“故意的人际交往”的图例中,我希望只显示“威胁性交往”、“友好交往”和“实际交往”,并隐藏两个“无意识的人际交往”和“明显无端的交往”,因为它们是空的。我该怎么做?
我的代码:
sur %>%
filter(!(species_broad %in% c("Monkey", "Cattle"))) %>%
drop_na(circumstances_bite_broad_intended) %>%
add_count(species_broad) %>%
mutate(y_species_broad =
reorder(
factor(paste0(species_broad, "\n", "(n = ", n, ")")),
as.numeric(species_broad)
)) %>%
ggplot(aes(y= y_species_broad, fill=circumstances_bite_broad, pattern = circumstances_bite_broad_intended)) +
geom_bar_pattern(
colour = "black",
position = "fill",
pattern_density = 0.1,
pattern_spacing = 0.015,
pattern_key_scale_factor = 0.9
) +
scale_x_continuous(labels=c("0","25%","50%","75%","100%")) +
labs(x="Proportion of responses", y="Animal species", fill="Circumstances", pattern="Intentional Human Engagement") +
ggtitle("Circumstances of bite in different animal species") +
scale_fill_manual(values =c("Intentional Human Engagement" = "#EC7979",
"Unintentional Human Engagement" = "lightblue",
"Apparently unprovoked" = "darkblue")) +
scale_pattern_manual(values=c("Threatening Engagement" = "circle",
"Friendly Engagement" = "stripe",
"Practical Engagement" = "crosshatch",
"Unintentional Human Engagement" = "none",
"Apparently unprovoked" = "none"))+
theme(legend.key = element_rect(fill = "white")) +
guides(pattern = guide_legend(override.aes = list(fill = "white")),
fill = guide_legend(override.aes = list(pattern = "none")))
我的数据:
structure(list(circumstances_bite_broad_intended = structure(c(2L,
4L, 1L, 3L, 4L, 4L, 4L, 5L, 5L, 3L, 5L, 1L, 4L, 5L, 5L, 1L, 5L,
5L, 2L, 5L, 4L, 3L, 5L, 2L, 2L, 5L, 4L, 3L, 3L, 5L, 1L, 5L, 1L,
1L, 5L, 5L, 4L, 4L, 5L, 1L, 5L, 5L, 1L, 1L, 5L, 5L, 2L, 3L, 5L,
NA, 4L, 5L, 4L, 4L, 4L, 1L, 4L, 1L, 5L, 4L, 5L, 2L, 5L, 1L, 3L,
1L, 2L, 4L, 5L, 5L, 1L, 5L, 5L, 5L, 5L, 5L, 5L, 2L, NA, 1L, 2L,
3L, 5L, 1L, 2L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 1L, 4L, 4L, 3L,
4L, 3L, 4L, 3L, 4L, 5L, 4L, 2L, 4L, 3L, 4L, 2L, 4L, 3L, 5L, 1L,
5L, 5L, 3L, 2L, 2L, 5L, 4L, 4L, 4L, 4L, 4L, 3L, 5L, 3L, 4L, 4L,
4L, 1L, 1L, 2L, 4L, 5L, 4L, 4L, 4L, 3L, 4L, 5L, 5L, 4L, 4L, 5L,
5L, 5L, 5L, 4L, 4L, 5L, 4L, 2L, 5L, 5L, 5L, 5L, 3L, 5L, 1L, 5L,
4L, 3L, 5L, 1L, 2L, 2L, 4L, 4L, 4L, 5L, 4L, 5L, 5L, 4L, 2L, 4L,
2L, 4L, 4L, 4L, 4L, 2L, 3L, 2L, 2L, 4L, 4L, 1L, 5L, 4L, 4L, 4L,
4L, 4L, 4L, 1L, 4L, 2L, 4L, 3L, 5L, 5L, 2L, 4L, 1L, 4L, 2L, 4L,
4L, 4L, 4L, 4L, 1L, 1L, 2L, 1L, 4L, 5L, 4L, 4L, 4L, 4L, 4L, 2L,
4L, 4L, 3L, 5L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
4L, 2L, 3L, 1L, 1L, 4L, 4L, 4L, 4L, 1L, 4L, 4L, 4L, 4L, 5L, 4L,
2L, 4L, 4L, 4L, 4L, 2L, 4L, 4L, 2L, 5L, 5L, 5L, 5L, 4L, 4L, 4L,
5L, 5L, 5L, 4L, 1L, 4L, 4L, 5L, 1L, 5L, 2L, 1L, 2L, 1L, 4L, 4L,
4L, 5L, 2L, 4L, 2L, 4L, 4L, 4L, 2L, 5L, 4L, 4L, 4L, 1L, 4L, 3L,
4L, 4L, 2L, 5L, 2L, 2L, 3L, 5L, 2L, 4L, 5L, 1L, 4L, 4L, 4L, 2L,
4L, 5L, 3L, 2L, 4L, 3L, 4L, 4L, 4L, 5L, 4L, 1L, 4L, 4L, 5L, 4L,
4L, 5L, 4L, 5L, 4L, 4L, 4L, 5L, 2L, 1L, 3L, 5L, 4L, 5L, 5L, 5L,
1L, 5L), levels = c("Threatening Engagement", "Friendly Engagement",
"Practical Engagement", "Unintentional Human Engagement", "Apparently unprovoked"
), class = "factor"), circumstances_bite_broad = structure(c(1L,
2L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 1L, 3L, 1L, 2L, 3L, 3L, 1L, 3L,
3L, 1L, 3L, 2L, 1L, 3L, 1L, 1L, 3L, 2L, 1L, 1L, 3L, 1L, 3L, 1L,
1L, 3L, 3L, 2L, 2L, 3L, 1L, 3L, 3L, 1L, 1L, 3L, 3L, 1L, 1L, 3L,
NA, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 1L, 3L, 2L, 3L, 1L, 3L, 1L, 1L,
1L, 1L, 2L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, NA, 1L, 1L,
1L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 3L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 3L, 1L,
3L, 3L, 1L, 1L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 1L, 2L, 2L,
2L, 1L, 1L, 1L, 2L, 3L, 2L, 2L, 2L, 1L, 2L, 3L, 3L, 2L, 2L, 3L,
3L, 3L, 3L, 2L, 2L, 3L, 2L, 1L, 3L, 3L, 3L, 3L, 1L, 3L, 1L, 3L,
2L, 1L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 2L, 3L, 3L, 2L, 1L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 3L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 3L, 3L, 1L, 2L, 1L, 2L, 1L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 1L,
2L, 2L, 1L, 3L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 3L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 3L, 3L, 3L, 3L, 2L, 2L, 2L,
3L, 3L, 3L, 2L, 1L, 2L, 2L, 3L, 1L, 3L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 3L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 1L, 2L, 1L,
2L, 2L, 1L, 3L, 1L, 1L, 1L, 3L, 1L, 2L, 3L, 1L, 2L, 2L, 2L, 1L,
2L, 3L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 2L, 3L, 2L,
2L, 3L, 2L, 3L, 2L, 2L, 2L, 3L, 1L, 1L, 1L, 3L, 2L, 3L, 3L, 3L,
1L, 3L), levels = c("Intentional Human Engagement", "Unintentional Human Engagement",
"Apparently unprovoked"), class = "factor"), circumstances_bite_avoidability = structure(c(1L,
2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L,
2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L,
NA, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, NA, 1L, 1L,
1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L,
2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L,
2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L,
2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L,
2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
1L, 2L), levels = c("Avoidable", "Unavoidable"), class = "factor")), row.names = c(NA,
-355L), class = "data.frame")
您可以删除图例条目或通过比例的
breaks
参数指定要显示的图例条目,即使用 scale_pattern_manual(..., breaks = c("Threatening Engagement", "Friendly Engagement", "Practical Engagement")
注意:您的示例数据缺少一列
species_broad
。因此,我删除了使用此专栏的所有代码。
library(ggplot2)
library(tidyr)
library(ggpattern)
sur %>%
drop_na(circumstances_bite_broad_intended) %>%
ggplot(aes(
y = factor(1), fill = circumstances_bite_broad,
pattern = circumstances_bite_broad_intended
)) +
geom_bar_pattern(
colour = "black",
position = "fill",
pattern_density = 0.1,
pattern_spacing = 0.015,
pattern_key_scale_factor = 0.9
) +
scale_x_continuous(labels = c("0", "25%", "50%", "75%", "100%")) +
labs(
x = "Proportion of responses", y = "Animal species",
fill = "Circumstances", pattern = "Intentional Human Engagement"
) +
ggtitle("Circumstances of bite in different animal species") +
scale_fill_manual(values = c(
"Intentional Human Engagement" = "#EC7979",
"Unintentional Human Engagement" = "lightblue",
"Apparently unprovoked" = "darkblue"
)) +
scale_pattern_manual(values = c(
"Threatening Engagement" = "circle",
"Friendly Engagement" = "stripe",
"Practical Engagement" = "crosshatch",
"Unintentional Human Engagement" = "none",
"Apparently unprovoked" = "none"
), breaks = c("Threatening Engagement", "Friendly Engagement", "Practical Engagement")) +
theme(legend.key = element_rect(fill = "white")) +
guides(
pattern = guide_legend(override.aes = list(fill = "white")),
fill = guide_legend(override.aes = list(pattern = "none"))
)