r - 在水平条形图中的刻度标签之间添加节标题
问题描述
我正在尝试制作一个水平分组条形图,显示人们如何回答不同的问题。
有没有办法可以将问题分成几个部分,在每个部分上方加上一个粗体标题,说明它是什么?如果没有它,最好不要像我使用面板那样产生单独的绘图区域。
对于下面的示例,假设我要插入的标题是“元音”和“辅音”(本示例中的图片中以红色手绘)
library('ggplot2')
library('stringr')
set.seed(5)
questions <- str_wrap(c('Blah blah blah blah blah blah B?',
'Blbbity blah blibbity blah C?',
'Blah blah blibbity blah blah blah D?',
'Blah blah blah A?',
'Blah blah blah blibbity E?',
'Blah blah blibbity blah I?'),15)
status <- data.frame(matrix(data=NA, nrow=18,ncol=3))
names(status) <- c('varname','type','percent')
status['varname'] <- factor(c(rep(1,3),rep(2,3),rep(3,3),rep(4,3),rep(5,3),rep(6,3)),labels=questions)
status['type'] <- c(rep(c('Cohabiting','Married','Divorced'),6))
status['percent'] <- c(rnorm(18,.5,.2))
ggplot(status, aes(varname, percent)) +
theme(axis.title.y = element_blank(), legend.title = element_blank(), plot.title = element_text(hjust = 0.5), legend.position = "top") +
geom_bar(aes(fill = type), position = "dodge", stat="identity") + coord_flip() + scale_fill_manual(values=c('cadetblue1','cadetblue3','darkcyan')) +
ggtitle('By couple type') + labs(y='Percent') + ylim(0,1)
解决方案
您可以调整facet_grid()
情节以根据自己的喜好删除所有面板。
如果您想要跨方面的 y 轴,请参阅此答案
library(dplyr)
library("ggplot2")
library("stringr")
# create new alp variable
status <- status %>%
# edit: shamelessly steal from Maurits's answer :-)
mutate(alp = if_else(str_detect(varname, "(I|E|A)\\?$"), "Vowels", "Consontants"))
p2 <- ggplot(status, aes(varname, percent)) +
geom_col(aes(fill = type), position = "dodge") +
facet_grid(alp ~ ., scales = 'free_y', space = 'free_y', switch = 'y') +
coord_flip() +
scale_fill_manual(values = c("cadetblue1", "cadetblue3", "darkcyan"),
# increase the spacing between legend key text
labels = stringr::str_pad(status$type, 5, "right"),) +
ggtitle("By couple type") +
labs(y = "Percent") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0), limits = c(0, 1)) +
theme_classic(base_size = 14, base_family = 'mono') +
theme(axis.title.y = element_blank(),
legend.spacing.x = unit(0.25, unit = "cm"),
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
legend.position = "top") +
theme(panel.grid.minor.x = element_blank()) +
# switch the facet strip label to outside
theme(strip.placement = 'outside',
strip.text.y = element_text(face = 'bold'),
strip.background.y = element_rect(colour = NA, fill = 'grey80'))
p2
p3 <- ggplot(status, aes(varname, percent)) +
geom_col(aes(fill = type), position = "dodge") +
facet_grid(alp ~ ., scales = 'free_y', space = 'free_y', switch = 'y') +
coord_flip() +
scale_fill_manual(values = c("cadetblue1", "cadetblue3", "darkcyan"),
# increase the spacing between legend key text
labels = stringr::str_pad(status$type, 5, "right"),) +
ggtitle("By couple type") +
labs(y = "Percent") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0), limits = c(0, 1)) +
theme_classic(base_size = 14, base_family = 'mono') +
theme(axis.title.y = element_blank(),
legend.spacing.x = unit(0.25, unit = "cm"),
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
legend.position = "top") +
theme(panel.grid.minor.x = element_blank()) +
# switch the facet strip label to outside
# remove background color
theme(strip.placement = 'outside',
strip.text.y = element_text(face = 'bold'),
strip.background.y = element_blank())
p3
由reprex 包(v0.2.1.9000)于 2018 年 10 月 2 日创建
推荐阅读
- c# - Azure Pipeline 部署到 Web 应用服务失败,缺少必需的属性“OutputPath”
- c# - 尽管在默认图标部分放置了一张图片,但该图片并没有作为我游戏的图标出现。我应该怎么办?
- r - 使用 nnet() 权重进行外部预测
- maven - 运行 maven install 命令时出现“无法解析依赖项”错误
- android - 如何在android改造中发送json数组?
- c++ - 在同一地图的迭代中更改地图中的值(嵌套迭代器)C ++
- javascript - object["#"] 已定义且未定义?
- python-3.x - 在 aws boto3 上传中获取进度回调
- javascript - Including Javascript code from a JSP file
- c - What are the pros and cons of using extern variables in C in production code?