ggplot2中底部x轴和y轴顶部的图?

时间:2017-12-04 11:55:57

标签: r ggplot2

我有一个表格,其坐标数据如下所示,

V1       V2      V3       V4    
10253363 10273825 9982154 10003803     
10265080 10285697 9993266 10015040     
10250800 10271301 9979709 10001394     
10254775 10275140 9983264 10004815     
10268607 10288871 9995004 10016450     
10263978 10284276 9992831 10014300  

我想生成一个类似下图所示的情节, enter image description here

我试过了,

blast <- fread("../plots/coords.tsv")
blast$id = as.numeric(rownames(blast))
ggplot(blast)+ 
  geom_rect(aes(xmin=V1,xmax=V2,ymin=V3,ymax=V4, group = id), alpha=0.2) + 
  scale_y_continuous(position = "top") 

最后得到了下面的情节。

enter image description here 似乎y轴位置只能在左右之间翻转。因此,这对我不起作用。

如何在ggplot2中生成预期的情节?还是有另一种方法可以实现吗?

2 个答案:

答案 0 :(得分:0)

这不是那么容易,因为你需要重新塑造然后稍微欺骗ggplot2。

需要转换因子,因为ggplot实际上不允许单独的轴,只根据简单的转换进行重新标记。

另见this related answer

你有一堆重叠的范围,所以它看起来不像你的示例情节。

library(tidyr)
library(dplyr)
library(ggplot2)

conversion_factor <- mean(c(blast$V3, blast$V4)) / mean(c(blast$V1, blast$V2))
blast2 <- mutate(blast, V3 = V3 / conversion_factor, V4 = V4 / conversion_factor)

blast_long <- blast2 %>% 
  gather(var, x, -id) %>% 
  group_by(id) %>% 
  mutate(y = c(0, 0, 1, 1), 
         order = c(1, 2, 4, 3)) %>% 
  arrange(order)

ggplot(blast_long, aes(x, y, group = id))+ 
  geom_polygon(alpha = 0.3) +
  scale_x_continuous(sec.axis = sec_axis(~ . * conversion_factor))

enter image description here

答案 1 :(得分:-1)

我找到了riverplot库,我认为这是解决问题的可能方法。

另一种可能的解决方案可能是斜率图,我会以这种方式开始。我在Github上找到了一个例子:Slopegraphs in R with ggplot2

我希望您发现此信息有用。

参考文献: