如何使用R

时间:2015-11-06 20:44:48

标签: r plot colors line intervals

我想在这些点之间为不同颜色的绘图线的X轴间隔着色:

52660,106784,151429,198098,233666,273857,307933,343048,373099,408960,441545,472813,497822,518561,537471,556747,571683,591232,599519,616567,625727,633745

间隔代表22条染色体上的SNP位置。

问题是间隔是不相等的(例如52660 - 106784,106784 - 151429,...... 472813 - 497822,......)。 Y轴值表示祖先频率。 X轴名称是SNP_position

我发现最接近的是" ifelse",但由于某种原因,它对我来说效果不佳。

例如,对于第一个间隔(0 - 52660),我包括了" col"变量为"情节"我试过了:

col = ifelse(SNP_position < 52660,'blue', 'green')

col=ifelse(SNP_position < 52660 & SNP_position > 106784,"blue","green")

但是当我这样做时,整条线变为绿色。

这是我要为SNP_position vs ancestry

着色的情节

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

以下是关于如何使用segments进行操作的概念证明。第一步是创建交替段的矢量。我正在使用偶数和赔率这样做。您必须在代码中插入正确的y轴数据。

x <-1:700000
segments <-c(52660, 106784, 151429, 192098, 233666, 273857, 307933, 343048, 373099, 408960, 441545, 472813, 497822, 518561, 537471, 556747, 571683, 591232, 599519, 616567, 625727, 633745)

stOdds <- segments[1:length(segments) %% 2 == 1]
stEvens <- segments[1:length(segments) %% 2 == 0]

plot(x, type="l", col="green", lwd=2)
segments(stOdds,stOdds,stEvens,stEvens,col="blue", lwd=2)

enter image description here

<强>更新 通过附加信息,以下是cutlines的使用方法。

#create data
x <-1:700*1000
y <-runif(700)
z <-data.frame(x,y)

#cut in segments
my_segments <-c(52660, 106784, 151429, 192098, 233666, 273857, 307933, 343048, 373099, 408960, 441545, 472813, 497822, 518561, 537471, 556747, 571683, 591232, 599519, 616567, 625727, 633745)
my_cuts <-cut(x,my_segments, labels = FALSE)
my_cuts[is.na(my_cuts)] <-0
#create subset of of segments
z_alt <-z
z_alt[my_cuts %% 2 == 0,] <-NA

#plot green, then alternating segments in blue
plot(z, type="l", col="green", lwd=2)
lines(z_alt,col="blue", lwd=2)

enter image description here