【问题标题】:Using image() in R: How to left-align tick marks on x-axis?在 R 中使用 image():如何在 x 轴上左对齐刻度线?
【发布时间】:2020-05-08 14:02:32
【问题描述】:

我正在从一个包含 0 和 1 行的数据表中制作一个双色图形,如下所示:

mem/Bur_05_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Bur_05_sorted.bam_B 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Ell_06_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Ell_06_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Ell_07_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Ell_07_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Ste_01_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Ste_01_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Sto_02_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Sto_02_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 
mem/Sto_03_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Sto_03_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Sto_07_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Sto_07_sorted.bam_B 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Vog_01_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Vog_01_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Vog_02_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Vog_02_sorted.bam_B 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Vog_03_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Vog_03_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Vog_04_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Vog_04_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Vog_05_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Vog_05_sorted.bam_B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
mem/Vog_06_sorted.bam_A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
mem/Vog_06_sorted.bam_B 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

使用此代码:

a<-read.table("L_1616.vit.txt",row.names=1)

rowlabs = c("Bur_05_A","Bur_05_B","Ell_06_A","Ell_06_B","Ell_07_A","Ell_07_B","Ste_01_A","Ste_01_B","Sto_02_A","Sto_02_B","Sto_03_A","Sto_03_B","Sto_07_A","Sto_07_B","Vog_01_A","Vog_01_B","Vog_02_A","Vog_02_B","Vog_03_A","Vog_03_B","Vog_04_A","Vog_04_B","Vog_05_A","Vog_05_B","Vog_06_A","Vog_06_B")

columnlabs = c(0:(ncol(a)-1))*0.25

x11()
par(mar=c(5,6,4,2)+.1)
image(t(as.matrix(a)),col=c("blue","red"),axes=F)
axis(1,at=seq(0,2,length.out=ncol(a)), labels=columnlabs,las=2)
axis(2,at=seq(1,0,length.out=nrow(a)), labels=rowlabs, las=1)
savePlot("./plots/L_1616.png","png")

在图中,刻度线为每个“块”居中。

但是,我希望刻度线与每个“块”的左侧中心对齐。像这样:

我怎样才能做到这一点? 谢谢!

【问题讨论】:

    标签: r image axis


    【解决方案1】:

    您需要在axis(1,...) 调用中使用“at”位置,这决定了刻度线的位置。
    默认情况下,image() 以 0 到 1 的等距值为中心绘制每个块,因此如果图像上有 n 个块,则每个块的宽度为 1/n。因此,您需要生成一系列向左偏移 1/2n 的“at”位置。

    data=matrix(sample(1:2,192,replace=T),ncol=16)
    image(data,axes=F)
    x_tick_offset=1/(2*nrow(data))
    y_tick_offset=1/(2*ncol(data))
    axis(1,at=seq(0,1,length.out=nrow(data))-x_tick_offset,labels=letters[1:nrow(data)])
    axis(2,at=seq(1,0,length.out=ncol(data))+y_tick_offset,labels=1:ncol(data),las=2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-11
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多