我有一个表格,其坐标数据如下所示,
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
我试过了,
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")
最后得到了下面的情节。
如何在ggplot2
中生成预期的情节?还是有另一种方法可以实现吗?
答案 0 :(得分:0)
这不是那么容易,因为你需要重新塑造然后稍微欺骗ggplot2。
需要转换因子,因为ggplot
实际上不允许单独的轴,只根据简单的转换进行重新标记。
你有一堆重叠的范围,所以它看起来不像你的示例情节。
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))
答案 1 :(得分:-1)
我找到了riverplot
库,我认为这是解决问题的可能方法。
另一种可能的解决方案可能是斜率图,我会以这种方式开始。我在Github上找到了一个例子:Slopegraphs in R with ggplot2
我希望您发现此信息有用。