隐藏图例中的类别

问题描述 投票:0回答:1

我有一个包含 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")
r ggplot2 categorical-data
1个回答
0
投票

您可以删除图例条目或通过比例的

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"))
  )

© www.soinside.com 2019 - 2024. All rights reserved.