r - GGplot:并排的两个堆叠条形图(不是构面)
问题描述
我正在尝试ggplot2
在 R 中使用重新创建此解决方案:组合两个堆叠条形图以获得分组堆叠条形图
diamonds %>%
filter(color=="D"|color=="E"|color=="F") %>%
mutate(dummy=rep(c("a","b"),each=13057)) %>%
ggplot(aes(x=color,y=price))+
geom_bar(aes(fill=clarity),stat="identity",width=.25)+
facet_wrap(~cut)
我向数据集添加了一个新变量,diamonds
名为dummy
. dummy
有两个值:a
和b
。假设我想通过创建一个条形图来比较这两个值,该条形图对于 的每个值都有两个彼此相邻的堆叠条(每个值一个dummy
)color
。我怎样才能操纵这个,使得每个值都有两个堆叠条color
?
我认为这将涉及position dodge
和/或单独的legend
,但到目前为止我一直没有成功。我不想添加另一个方面 - 我希望这些都在每个方面的 x 轴上。
解决方案
与帖子中的方法类似,您已经链接了一个选项来实现您想要的结果,这将是通过两个geom_col
并将 x 轴变量转换为numeric
类似的变量。但是,这样做需要通过手动设置中断和标签scale_x_continuous
。此外,我利用该ggnewscale
包添加了第二个填充比例:
library(ggplot2)
library(dplyr)
d <- diamonds %>%
filter(color == "D" | color == "E" | color == "F") %>%
mutate(dummy = rep(c("a", "b"), each = 13057))
ggplot(mapping = aes(y = price)) +
geom_col(data = filter(d, dummy == "a"), aes(x = as.numeric(color) - .15, fill = clarity), width = .3) +
scale_fill_viridis_d(name = "a", guide = guide_legend(order = 1)) +
scale_x_continuous(breaks = seq_along(levels(d$color)), labels = levels(d$color)) +
ggnewscale::new_scale_fill() +
geom_col(data = filter(d, dummy == "b"), aes(x = as.numeric(color) + .15, fill = clarity), width = .3) +
scale_fill_viridis_d(name = "b", option = "B", guide = guide_legend(order = 2)) +
facet_wrap(~cut)
推荐阅读
- c# - 允许将 id_token 而不是 Access Token 传递给 api
- javascript - 在 React 中将 0 和 1 切换为布尔值
- python - Pandas read_pickle 因缺少/过期模块而中断
- vue.js - VueJs - 突出显示活动选项卡并在页面加载后突出显示第一个选项卡
- sql - 如何在 SQL 中将小时数划分为下一个工作日?
- javascript - 通过按钮单击隐藏/删除 ajax 调用中的表行
- matlab - 计算自相关函数集,然后求和
- python - 如何在 folium 地图的工具提示上显示 JSON 数据?
- c# - RedirectStandardOutput 显示进程关闭后的结果 C#(不逐行显示输出)
- c# - 用多个表填充列表对象