R 如何在多图中绘制多级变量

R 如何在多图中绘制多级变量,r,ggplot2,R,Ggplot2,我想在一个图形中每3种颜色绘制一个图。对于我的示例数据,我需要两个图。此外,是否可以仅绘制具有大多数obs的前3种颜色组?我该怎么办。目前我有6合一的图表。这只是一个示例数据,我的真实数据大约有50个级别,我的代码无法创建可读的内容。太粗鲁了 代码为: ID<- c("1","2","3","4","5","6","7","8",

我想在一个图形中每3种颜色绘制一个图。对于我的示例数据,我需要两个图。此外,是否可以仅绘制具有大多数obs的前3种颜色组?我该怎么办。目前我有6合一的图表。这只是一个示例数据,我的真实数据大约有50个级别,我的代码无法创建可读的内容。太粗鲁了

代码为:

ID<- c("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18")
Group<-c("A","B","C","D","D","D","A","B","D","C","B","D","A","A","C","B","B","B")
Color<-c("Green","Blue","Red","Red","Black","Yellow","Green","Green","Yellow","Purple","Red","Yellow","Yellow","Yellow","Green","Red","Red","Green")
Realy_Love<-c("Y","N","Y","Y","N","N","Y","Y","Y","N","N","Y","N","Y","N","Y","N","Y")
Sample.data <- data.frame(ID, Group, Color, Realy_Love)

Sample<-Sample.data %>%
    count(Group, Color, sort = TRUE)

Sample<-Sample.data %>%
    count(Group, Color, Realy_Love, sort = TRUE)
    
library(dplyr)
library(ggplot2)
Sample.data %>%
  count(Group, Color, sort = TRUE) %>% 
    ggplot(aes(x = Group, y = n, fill = Color)) + 
         geom_col() + 
         facet_wrap(~ Color)

ID对于第一个问题,制作两个图形,每个图形有3种颜色,您需要创建一个变量来对每个组中的颜色进行分组。我们将使用
case\u when()
函数进行此操作

Sample.data %>%
  count(Group, Color, sort = TRUE) %>%
  mutate(Facet = case_when(Color %in% c("Black", "Blue", "Green") ~ "Group 1",
                           Color %in% c("Purple", "Red", "Yellow") ~ "Group 2")) %>%
  ggplot(aes(x = Group, y = n, fill = Color)) + 
  geom_col() + 
  facet_wrap(~ Facet)

对于您的第二个请求,关于仅绘制具有大多数观察值的3种颜色,我们可以使用
fct_lump()
函数,该函数来自
forcats
软件包:

Sample.data %>%
  mutate(Color = fct_lump(f = Color, 
                          n = 3,
                          other_level = "Other colors")) %>%
  filter(Color != "Other colors") %>%
  count(Group, Color, sort = TRUE) %>%
  ggplot(aes(x = Group, y = n, fill = Color)) + 
  geom_col() + 
  facet_wrap(~ Color)

对于第一个问题,制作两个分别有3种颜色的图形,您需要创建一个变量,将每组中的颜色分组。我们将使用
case\u when()
函数进行此操作

Sample.data %>%
  count(Group, Color, sort = TRUE) %>%
  mutate(Facet = case_when(Color %in% c("Black", "Blue", "Green") ~ "Group 1",
                           Color %in% c("Purple", "Red", "Yellow") ~ "Group 2")) %>%
  ggplot(aes(x = Group, y = n, fill = Color)) + 
  geom_col() + 
  facet_wrap(~ Facet)

对于您的第二个请求,关于仅绘制具有大多数观察值的3种颜色,我们可以使用
fct_lump()
函数,该函数来自
forcats
软件包:

Sample.data %>%
  mutate(Color = fct_lump(f = Color, 
                          n = 3,
                          other_level = "Other colors")) %>%
  filter(Color != "Other colors") %>%
  count(Group, Color, sort = TRUE) %>%
  ggplot(aes(x = Group, y = n, fill = Color)) + 
  geom_col() + 
  facet_wrap(~ Color)

谢谢你的回答。问题1实际上需要两个图,看起来像你为问题2制作的。我想要两个条形图,每个都有3个小的颜色图。这是一种不需要手动选择图1和图2中选择的3种颜色的方法吗?对不起,我不明白您想要为绘图的每个细节使用哪些变量。您需要两个图形,但将数据一分为二的变量或标准是什么?我需要知道这一点来帮助你。你说你想要一种颜色的3个小图,这是什么意思?每个组的图表?谢谢你的回答。问题1实际上需要两个图,看起来像你为问题2制作的。我想要两个条形图,每个都有3个小的颜色图。这是一种不需要手动选择图1和图2中选择的3种颜色的方法吗?对不起,我不明白您想要为绘图的每个细节使用哪些变量。您需要两个图形,但将数据一分为二的变量或标准是什么?我需要知道这一点来帮助你。你说你想要一种颜色的3个小图,这是什么意思?每个组的图表?(ABCD…)