在 ggplot2 中添加两个类别

Add two more categories in ggplot2

我有这样的数据集

df <- data.frame(ID=c("10","11","14","15","16","18","3","5","6","8","9","n"),
                 A=c("C","U","U","C","C","C","U","C","U","U","C","U"),
                 B=c("P","P","C","P","C","C","C","P","C","P","C","P"),
                 N=c(7,2,8,6,2,3,7,4,9,5,4,4))

ID是每一行的标识号。 N 是值。 A和B是两个类别。我想创建一个条形图或类似图来比较基于 A 和 B 类别的 N。

这是我的代码:

ggplot(data=df,aes(x=ID,y=N,fill=A)) +
  geom_col(position="dodge")+
  facet_wrap(~B)

我得到的是这样的:

这里我希望能把相同的颜色放在“C”和“P”类中,我想删除图表中的空列,例如“C”类中的ID-10。

我可能没有用最合适的方法来制作这个图,但这是我现在能想到的。如果你有更好的方法来创建这个数字,你能帮我吗?谢谢!

facet_wrap() 中使用“自由”比例允许面板之间使用不同的轴比例。在这种情况下,您想释放 x 轴,以便可以使用 scales = "free_x".

我将你问题的另一部分解释为关于将每个面板中特定颜色的条集中在一起。这取决于你想用什么信息来整合它们。例如,您可以定义因子顺序。在这里,我创建了一个新变量,将“A”值粘贴到“ID”值之前,并在 x 轴上使用它,因此“C”组绘制在“U”组之前。我称这个新变量为“combo”。

这会将 A 颜色集中在一起,但也会更改轴刻度标签:

df$combo = with(df, paste(A, ID))

ggplot(data = df, aes(x = combo, y = N, fill = A)) +
    geom_col(position="dodge") +
    facet_wrap(~B, scales = "free_x")

在刻面中使用自由刻度时设置不同的轴标签很棘手,但如果您同时提供 labelsbreaks 就可以完成,如图 .

使用这种方法,您的代码可以是:

ggplot(data = df, aes(x = combo, y = N, fill = A)) +
    geom_col(position="dodge") +
    facet_wrap(~B, scales = "free_x") +
    scale_x_discrete(labels = df$ID, breaks = df$combo)

reprex package (v2.0.0)

于 2021-06-24 创建