如何用R绘制图形,第一个值用一种颜色,下一个值用另一种颜色?

如何用R绘制图形,第一个值用一种颜色,下一个值用另一种颜色?,r,plot,colors,data-visualization,R,Plot,Colors,Data Visualization,我一直在尝试,但我找不到解决办法。我能做的最好的事情就是用一种颜色绘制前15846个值,然后使用lines()函数添加剩余的841个点。但这些数据随后出现在图表的开头,并不会从15846个数据点继续 str(as.numeric(sigma.in.fr)) num [1:15846] 0.000408 0.000242 0.000536 0.000274 0.000476 ... str(as.numeric(sigma.out.fr)) num [1:841] 0.002558 0.00

我一直在尝试,但我找不到解决办法。我能做的最好的事情就是用一种颜色绘制前15846个值,然后使用
lines()
函数添加剩余的841个点。但这些数据随后出现在图表的开头,并不会从15846个数据点继续

str(as.numeric(sigma.in.fr))
 num [1:15846] 0.000408 0.000242 0.000536 0.000274 0.000476 ...

str(as.numeric(sigma.out.fr))
 num [1:841] 0.002558 0.000428 0.000255 0.000549 0.00028 ...

plot(as.numeric(sigma.in.fr),type="l",col=c("tomato4"))
lines(as.numeric(sigma.out.fr), type="l",col="tomato1")
这将返回以下绘图:


请提供一个可复制的示例。使用软件包
ggplot2
dplyr
可以执行以下操作:

df <- tibble(x = seq(1,1000, 1), y = seq(1, 500.5, 0.5))


ggplot() +
  geom_line(data = df %>% filter(x < 800),
            aes(x = x, y = y), color = "red", size =2) +
  geom_line(data = df %>% filter(x >= 800), 
            aes(x = x, y = y),
            color = "black", size = 2)
df%过滤器(x<800),
aes(x=x,y=y),颜色=“红色”,尺寸=2)+
geom_线(数据=df%>%过滤器(x>=800),
aes(x=x,y=y),
颜色=“黑色”,尺寸=2)

请注意,我将截止值设置为800(因为我只创建了1000个点),但您可以轻松更改该值


所以我要做的是把数据放在geom_线中,如果你有不同的数据帧(x和y重叠),你也可以用它来绘制同一个图形。但是,我会在不同的点过滤数据,以便geom_线绘制不同的线

让我们制作一些虚拟数据来演示:

sigma.ins.fr = sin((1:800)/20) + rnorm(800)
sigma.outs.fr = sin((801:1000)/20) + rnorm(200)
现在,将所有数据放在一个序列中

sigma.all = c(sigma.ins.fr, sigma.outs.fr)
并创建一个x向量,它只是沿着数据计数。我们需要在下面的
部分调用中使用它

x = seq_along(sigma.all)
现在为跟踪创建一个颜色向量。它与完整数据的长度相同,每个数据段都有一种颜色

cols = c(rep("tomato4", length(sigma.ins.fr)), rep("blue", length(sigma.outs.fr)))
现在创建一个空白画布,在上面绘制数据

plot(sigma.all, type="l", col=NA)
最后,我们可以绘制数据。不幸的是,
不允许在不同的段中使用单独的颜色。因此,我们可以使用

segments(head(x,-1), head(sigma.all,-1), x[-1], sigma.all[-1], type="l", col=cols)

或者,如果您真的喜欢使用两个单独的记录道来调整
,那么我们可以通过向每个调用添加x坐标来实现这一点:

plot(sigma.all, type="l", col=NA)
lines(seq_along(sigma.ins.fr), sigma.ins.fr, col=c("tomato4"))
lines(seq_along(sigma.outs.fr) + length(sigma.ins.fr), sigma.outs.fr, col="tomato1")

我的数据框是数字形式,没有x和y值,只需打印一列,但我希望第一行:1000行以一种颜色显示,下一行:100行:1200行以另一种颜色显示。@user521623无论您想打印什么,您都可以使用所有geom_uuu函数执行此操作。只要谷歌一下,你就会找到足够的例子。然而,很明显,你想要一个Costam为你的问题做的答案,这样你就不必改变任何事情,如果没有一个最小的可复制的例子,这是不可能的。谢谢Annet。我将查找ggplot图请发布
str(x)
的输出,其中
x
是数据集的名称。以及您尝试过的代码。请把这两个都写在问题里,我已经把它包括进去了。我对更复杂的R图有点陌生,所以我不太确定