根据距离在散点图上连接分组点/点

时间:2014-06-01 21:09:45

标签: r scatter-plot

我有2组深度点测量值,例如:

> a
  depth value
1     2     2
2     4     3
3     6     4
4     8     5
5    16    40
6    18    45
7    20    58

> b
  depth value
1    10    10
2    12    20
3    14    35

我希望在一个图中显示两个组,其中包含深度和不同符号,您可以看到here

plot(a$value, a$depth, type='b', col='green', pch=15)
points(b$value, b$depth, type='b', col='red', pch=14)

情节似乎没问题,但令人讨厌的部分是绿色符号都已连接(虽然我也想连接线)。我只想在一组具有2米间隔的连续数据点时才想要连接,即符号应该用2到8米(绿色)的线连接,然后B组符号应该连接10-14米(红色)和A组符号应连接(绿色),这意味着我不希望看到8米样本与A组16米之间的连接。

一个简单的解决方案可能是将A组分成两部分(比如A-浅和A-深),然后分别绘制A-shallow,B和A-deep。但这是完全不切实际的,因为我有数百个数据组,有数百个数组,即我必须产生许多深度剖面。因此,必须有一种编程的方法,使得对于特定的一组样本,点不会超过规定的频率/深度间隔(例如在这种情况下为2米)。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果plotlines遇到NA值,则会自动中断该行。使用它,我们可以在数据中插入缺失测量值的NA值,这样可以解决问题。一种方法是这个

rng<-range(range(a$depth), range(b$depth))
rng<-seq(rng[1], rng[2], by=2)

aa<-rep(NA, length(rng))
aa[match(a$depth, rng)]<-a$value

bb<-rep(NA, length(rng))
bb[match(b$depth, rng)]<-b$value

plot(aa, rng, type='b', col='green', pch=15)
points(bb, rng, type='b', col='red', pch=14)

哪个产生

plot

请注意,此代码假定所有深度测量均可被2整除。

我不确定您的所有群组是否确实拥有单独的data.frames,但根据您的实际数据结构,可能有更好的方法来填充缺失值。

答案 1 :(得分:2)

我们可以使用这样一个事实:当有NA时,线条会中断,就像MrFlick建议的那样。但是,可能有一种更简单的方法:

#Merge the two sets together
all = merge(a,b,by='depth', all=T)
#Plot the lines
plot(all$value.x, all$depth, type='b', col='green', pch=15)
points(all$value.y, all$depth, type='b', col='red', pch=14)

enter image description here