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

How to color unequal intervals of a plot line using R

我想在这些点之间用不同颜色为绘图线的 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_position

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

例如,对于第一个间隔 (0 - 52660),我为 "plot" 包含了 "col" 变量,我尝试了:

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

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

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

这是我要着色的情节

如有任何帮助,我们将不胜感激。

这是关于如何使用 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)

更新 有了附加信息,下面是如何使用 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)