我有一个包含数百个点(代表频率)的大型数据集,我从不同的地理位置收集了这些点,如下所示:
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
,否则我知道如何设置滴答。任何帮助将不胜感激!
答案 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)])
}