【问题标题】:R plot with tilted bars带有倾斜条的 R 图
【发布时间】:2020-04-01 10:55:09
【问题描述】:

我一直在尝试为出版物制作情节,但不知何故,有些栏杆被打破或向右倾斜。我一直在寻找问题出在哪里,但还算幸运。问题出在哪里:数据、我正在使用的库或我的操作系统的东西?这里有一些关于我的系统和 R 版本、我正在运行的代码和数据的详细信息:

我的系统和 R:

platform       x86_64-apple-darwin15.6.0   
arch           x86_64                      
os             darwin15.6.0                
system         x86_64, darwin15.6.0        
status                                     
major          3                           
minor          5.3                         
year           2019                        
month          03                          
day            11                          
svn rev        76217                       
language       R                           
version.string R version 3.5.3 (2019-03-11)
nickname       Great Truth           

代码:

library(Sushi)

pop1<-read.table ("pop1.stack.csv", header=TRUE, ",")
pop2<-read.table ("pop2.stack.csv", header=TRUE, ",")
fst1x2<-read.table ("fst.stack.csv", header=TRUE, ",")

head(pop1)
head(pop2)
head(fst1x2)


par(mfrow=c(3,1),mar=c(2,5,2,2))

chrom="Scaffold_2074"
chromstart=10000
chromend=7730000


plotBedgraph(pop1,chrom,chromstart,chromend,
             color=SushiColors(3)(6)[2])
axis(side=2,las=2,tcl=.2)
mtext("Pop1" ~(pi),side=2,line=2.5,cex=1.5,font=2)

plotBedgraph(pop2, chrom, chromstart, chromend,
             flip=TRUE, color=SushiColors(3)(6)[6], ymax=1.4)
labelgenome(chrom,chromstart,chromend,side=3,n=4,scale="Mb",line=0.02)

axis(side=2,las=2,tcl=.2,at=pretty(par("yaxp")[c(1,2)]),
     labels=-1*pretty(par("yaxp")[c(1,2)]))
mtext("Pop2" ~(pi),side=2,line=2.5,cex=1.5,font=2)


plotBedgraph(fst1x2,chrom,chromstart,chromend,
             color=SushiColors(3)(6)[4])
axis(side=2,las=2,tcl=.2)
mtext(expression(italic(F)[st]),side=2,line=2.5,cex=1.5,font=2)
labelgenome(chrom,chromstart=chromstart,chromend=chromend,n=4,chromline=2,
            scale="Mb")


dev.print(png, file = "stack.fig.png", width = 300, height = 200, units='mm', res = 300)

我得到的情节:

你可以在链接上找到数据。Data

数据如下:

> head(pop1)
            chr start    end         pi
1 Scaffold_2074 10000  60000 0.02540892
2 Scaffold_2074 20000  70000 0.03581412
3 Scaffold_2074 30000  80000 0.03999322
4 Scaffold_2074 40000  90000 0.05402227
5 Scaffold_2074 50000 100000 0.05350814
6 Scaffold_2074 60000 110000 0.04260332


 > head(pop2)
            Chr start    end         pi
1 Scaffold_2074 10000  60000 0.01910726
2 Scaffold_2074 20000  70000 0.02757993
3 Scaffold_2074 30000  80000 0.03359872
4 Scaffold_2074 40000  90000 0.04590020
5 Scaffold_2074 50000 100000 0.04594944
6 Scaffold_2074 60000 110000 0.04054279


> head(fst1x2)
            chr start    end    Fst01
1 Scaffold_2074 10000  60000 0.101773
2 Scaffold_2074 20000  70000 0.096691
3 Scaffold_2074 30000  80000 0.099691
4 Scaffold_2074 40000  90000 0.085867
5 Scaffold_2074 50000 100000 0.079663
6 Scaffold_2074 60000 110000 0.065473

任何建议将不胜感激。 谢谢!

【问题讨论】:

  • 联系维护者获取包Sushi。这些都涉及plotBedraph(),这可能是该包中的一个函数maintainer(Sushi)

标签: r plot


【解决方案1】:

我下载了你的数据集并安装了Sushi 包,我遇到的问题与你的“倾斜”条相同。

在将您的数据集与作为 Sushi 包示例提供的 bedgraph 数据集进行比较后,我声明您的行中有重叠。 我在这里为您提供了一个示例以查看结构:

> head(Sushi_DNaseI.bedgraph)
  chrom   start     end value
1 chr11 1640504 1640664     1
2 chr11 1640904 1641004     1
3 chr11 1641004 1641064     2
4 chr11 1641064 1641164     1
5 chr11 1645224 1645384     1
6 chr11 1645504 1645664     1

如您所见,每行的结尾不与后续行的开头重叠。如果您正在对绘图床图进行缩放,您可以看到这种重叠在绘图中产生了问题:

所以,我认为解决此问题的一种方法是修改数据集的end。我不知道这对您的研究和您试图绘制的结果是否有意义。因此,您可以使用dplyr 将每一行的end 替换为下一行的start

library(tidyverse)
p1bis <- pop1[1:30,] %>% mutate(end = lead(start,1)) %>% filter(!is.na(end))

> head(p1bis)
            chr start   end         pi
1 Scaffold_2074 10000 20000 0.02540892
2 Scaffold_2074 20000 30000 0.03581412
3 Scaffold_2074 30000 40000 0.03999322
4 Scaffold_2074 40000 50000 0.05402227
5 Scaffold_2074 50000 60000 0.05350814
6 Scaffold_2074 60000 70000 0.04260332

如果你正在绘制这个新数据集p1bis

chrom="Scaffold_2074"
chromstart=10000
chromend=300000
plotBedgraph(p1bis,chrom,chromstart,chromend,
             color=SushiColors(3)(6)[2])
axis(side=2,las=2,tcl=.2)
axis(side=1,las=2,tcl=.2)
mtext("Pop1" ~(pi),side=2,line=2.5,cex=1.5,font=2)

所以,现在,如果您将其应用于您的三个数据集:

pop1 <- pop1 %>% mutate(end = lead(start,1)) %>% filter(!is.na(end))
pop2 <- pop2 %>% mutate(end = lead(start,1)) %>% filter(!is.na(end))
fst <- fst %>% mutate(end = lead(start,1)) %>% filter(!is.na(end))

并且您正在使用您提供的相同代码绘制它们:

我希望它能帮助你理解你的情节的问题。 如果您需要一些精度,请告诉我。

【讨论】:

  • 非常感谢。这说得通。这个包的开发是为了绘制整个基因组的读取覆盖率,而不是像我正在做的那样绘制核苷酸多样性或遗传分化。我还尝试使用 awk 仅保留非重叠窗口将它们过滤掉:cat pop1.stack.csv | awk 'NR % 6 == 0' > pop1.nonoverlapping.csv 它也能正常工作。不过我喜欢你的做法,因为它具有更高的峰分辨率。
  • 很高兴它可以帮助您找出问题所在。关于awk,我帮不上什么忙。我对此知之甚少。但我希望你能弄清楚如何完成你的情节。
  • 是的。我用你的方法搞定了。 awk 只是另一种方式,但不如您的方式。谢谢:P
猜你喜欢
  • 2018-10-29
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2020-05-18
  • 2019-12-15
  • 2020-02-22
相关资源
最近更新 更多