首页 > 解决方案 > 如何在多面和分组的ggplot中着色条

问题描述

我制作了以下图(我使用“npk”数据集作为虚拟数据,因为我无法共享原始数据 - 但该图的系统性保持不变):

library(ggplot2)
library(scales)

ggplot(npk,aes(x=block,group=N)) + 
geom_bar(aes(y = ..prop..)) +
facet_grid(~ N) +
xlab("blocks") +
scale_y_continuous(labels = percent) +
theme(axis.text.x=element_blank(),axis.ticks.x=element_blank(),
     legend.title=element_blank())

块:块号 1-6
N:二进制变量 1/0

阴谋

现在我想根据块的数量将每个条(=块)着色为不同的颜色(我知道,这在这里没有多大意义,因为每个块的比例(对于变量 N)是相同的,但是对于我的原始数据,我有不同的比例,所以这是有道理的......)。除了对情节进行刻面之外,我还必须使用“group=N”,因为我需要每个块的比例。

我怎样才能做到这一点?我尝试了许多不同的方法来声明这些块的颜色,但不幸的是我无法为每个块着色,只能将所有块一起涂成灰色或其他特定颜色......

谢谢你的帮助!非常感谢!玛蒂娜

标签: rggplot2

解决方案


这似乎确实是一件棘手的事情!将herehere的答案放在一起,您可以通过稍微调整它用于计算y的方法来做到这一点,以便考虑按方面分组而不fill通过包括覆盖group

library(tidyverse)
library(scales)

ggplot(npk, aes(x = block)) +
  geom_bar(aes(
    y = ..count.. / tapply(..count.., ..PANEL.., sum)[..PANEL..],
    fill = block
  )) +
  facet_grid( ~ N) +
  xlab("blocks") +
  ylab("Percentage") +
  scale_y_continuous(labels = percent) +
  theme(
    axis.text.x = element_blank(),
    axis.ticks.x = element_blank(),
    legend.title = element_blank()
  )

reprex 包于 2021-10-25 创建 (v2.0.0 )


推荐阅读