R ggplot2:从条文

时间:2018-04-02 21:13:22

标签: r ggplot2

我正在尝试创建一个带有两个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)) 

这会创建一个这样的情节:

enter image description here

此图在x轴上显示0.00两次,我无法找到一种方法来移除分隔条带的两条垂直线之间的间距(一条是Gain,另一条是{{ 1}})。

非常感谢任何帮助。谢谢!

更新:我按照以下建议添加了Loss

scale_y_continuous(expand = c(0, 0))

这会创建一个这样的情节:

enter image description here

现在唯一的问题是条形图与图的左右边距之间没有间距 - 不确定为什么会发生这种情况。

1 个答案:

答案 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"))

enter image description here

和/或使用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))

enter image description here