我正在尝试创建一个带有两个x轴(分组的x轴)的条形图:
# read data
tmp <- read.table(text = "label CNV_x CNV_Type
17p -1 Loss
9p -1 Loss
16q 1 Gain
10p 1 Gain
8q 1 Gain
13q 1 Gain", header = T)
tmp$CNV_Type <- relevel(tmp$CNV_Type, ref = 'Loss')
# plot
ggplot(tmp, aes(x = label, y = CNV_x)) +
geom_bar(stat = 'identity') +
theme_bw() +
geom_hline(yintercept = 0) +
coord_flip() +
facet_wrap(~CNV_Type, strip.position = "bottom", scales = "free_x") +
theme(panel.spacing = unit(0, "lines"),
strip.background = element_blank(),
strip.placement = "outside",
panel.border = element_rect(colour = NA))
这会创建一个这样的情节:
此图在x轴上显示0.00
两次,我无法找到一种方法来移除分隔条带的两条垂直线之间的间距(一条是Gain
,另一条是{{ 1}})。
非常感谢任何帮助。谢谢!
更新:我按照以下建议添加了Loss
:
scale_y_continuous(expand = c(0, 0))
这会创建一个这样的情节:
现在唯一的问题是条形图与图的左右边距之间没有间距 - 不确定为什么会发生这种情况。
答案 0 :(得分:1)
我不会在这里使用facets。几个选项。您可以按颜色指示类型:
tmp %>%
ggplot(aes(label, CNV_x)) +
geom_col(aes(fill = CNV_Type)) +
geom_hline(yintercept = 0) +
coord_flip() +
scale_fill_manual(values = c("darkorange", "skyblue3"))
和/或使用annotate
将类型标签添加到地块中。这需要一些手动摆弄x,y并扩展以使其正确:
tmp %>%
ggplot(aes(label, CNV_x)) +
geom_col() +
geom_hline(yintercept = 0) +
coord_flip() +
annotate("text",
label = c("Loss", "Gain"),
x = c(7, 7),
y = c(-0.5, 0.5)) +
scale_x_discrete(expand = c(0.1, 0.1))