r - 如何在多面和分组的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”,因为我需要每个块的比例。
我怎样才能做到这一点?我尝试了许多不同的方法来声明这些块的颜色,但不幸的是我无法为每个块着色,只能将所有块一起涂成灰色或其他特定颜色......
谢谢你的帮助!非常感谢!玛蒂娜
解决方案
这似乎确实是一件棘手的事情!将here和here的答案放在一起,您可以通过稍微调整它用于计算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 )
推荐阅读
- c# - 如何通过在 xamarin 表单中绑定来使用可绑定属性?
- node.js - 尝试使用 PostgreSQL 对 Sails 1.0.2 进行 dockerize,无法以任何方式连接到数据库
- javascript - 使用socket io发送和获取数据的两条指令
- express - 如何使两个用户无法将相同的产品 ID 添加到购物车
- ios - Xcode 10 Beta 6 无法执行“coremlc”(没有这样的文件或目录)
- c# - 为泛型类注册依赖注入
- mongodb - 如何在MongoDB中选择两级数据结构?
- sql-server - 返回结果 SQL 的问题
- javascript - 用逗号合并数组的元素和最大计数器
- python - 如何在没有回调的情况下从 scrapy.Request 获得响应?