如何使用 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)
更新
有了附加信息,下面是如何使用 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)
我想在这些点之间用不同颜色为绘图线的 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)
更新
有了附加信息,下面是如何使用 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)