如何在R中垂直绘制点与不等间距的x轴刻度

时间:2015-11-17 01:21:13

标签: r

我有一个包含数百个点(代表频率)的大型数据集,我从不同的地理位置收集了这些点,如下所示:

data <- read.csv(file)

data

label Site1 Site 2 Site 3 Site 4 Site 5 Site 6
1     0.5   0.8    0.2    0.1    0.05   0.6
2     0.4   0.7    0.1    0.08   0.04   0.5
3     0.6   0.9    0.15   0.2    0.07   0.55
4     0.3   0.75   0.25   0.09   0.3    0
5     0.7   0.85   0.3    0.15   0.15   0

我也有从一个点到这些地理位置(站点)的距离:

0, 167, 171, 190, 221, 347, 629

我想创建一个图,其中x轴刻度/标签对应于距离,Site1的数据点垂直绘制在x = 167,Site2的点绘制在x = 171等。 我试过了:

plot("", "", xlim=c(0,700), ylim=c(0,1), main="Overlap", cex.axis=0.1)
axis(side=1, at=c(0, 167, 171, 190, 221, 347, 629), cex.axis=0.7, srt=90)
axis(side=2, at=c(0, 0.2, 0.4, 0.6, 0.8, 1.0), cex.axis=0.7)
points(x=167, Data[, 1])
points(x=171, Data[, 2])

我想创建一个空图,然后使用points一次添加一个数据,但我有两个主要问题。首先,我不希望空图有任何刻度线,但我希望范围达到700.使用上面的代码,R每100点刻一个刻度线。我试过axes=F但我得到了一个错误。此外,当我尝试绘制points(x=167, Data[, 1])(和所有其他点)Error in xy.coords(x, y) : 'x' and 'y' lengths differ时,我收到错误。我想我应该用第一组数据点调用第一个(主要)图,然后添加其他点,但我不知道如何在没有先设置x轴刻度的情况下做到这一点,我不会&# 39;除非我使用axis,否则我知道如何设置滴答。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

下面的代码将抑制每个x值的轴和绘图点。我用假数据来说明。我已设置数据,以便Data的列索引对应xvals的索引位置。

# Fake data
set.seed(149)
Data = data.frame(label=1:10, replicate(6, runif(10)))
xvals = c(0, 167, 171, 190, 221, 347, 629)

# Initialize plot
plot(NULL, xlim=c(0,700), ylim=c(0,1), main="Overlap", 
     xaxt="n", yaxt="n", xlab="x-label", ylab="y-label")
axis(side=1, at=xvals, cex.axis=0.7, srt=90)
axis(side=2, at=seq(0,1,0.2), cex.axis=0.7)

# Plot points at each x-value
for (i in xvals[-1]) {
  points(rep(i, nrow(Data)), Data[, match(i, xvals)])
}

enter image description here