我想在这些点之间为不同颜色的绘图线的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")
但是当我这样做时,整条线变为绿色。
着色的情节任何帮助都将受到高度赞赏。
答案 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)
<强>更新强>
通过附加信息,以下是cut
和lines
的使用方法。
#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)