如何使用R为绘图线的不等间隔着色

如何使用R为绘图线的不等间隔着色,r,plot,colors,line,intervals,R,Plot,Colors,Line,Intervals,我想在这些点之间用不同的颜色给绘图线的X轴间隔上色: 52660、106784、151429、192098、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-49782

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

52660、106784、151429、192098、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_位置

我发现最接近的用法是使用“ifelse”,但由于某些原因,它对我来说不太合适

例如,对于第一个间隔(0-52660),我将“plot”的“col”变量包括在内,并尝试:

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

col=ifelse(SNP_位置<52660和SNP_位置>106784,“蓝色”、“绿色”)
但当我这样做时,整条线变成绿色

这是我想画的情节


任何帮助都将不胜感激

以下是如何使用
的概念证明。第一步是创建交替段的向量。我用偶数和赔率来做这件事。您必须在代码中插入正确的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)

示例输出将受到欢迎。您可以使用
lines()
执行此操作,只需设置几个调用,初始绘图的x值将小于52660,然后
lines()
介于52660和106784之间,第二个
lines()
的x值将大于106784。笨重,但它能做到!感谢您的反馈Michael and Honey Badgerthank非常感谢您的帮助@P Lapointe!。我只是编辑了这篇文章,让它更清楚。现在可以看到,考虑到线型,插入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)
#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)