在同一图表上绘制不同颜色的矢量的不同部分

时间:2018-01-28 15:02:36

标签: r plot colors

从标题中假设这个向量和图:

plot(rnorm(200,5,2),type="l")

这将返回此图

enter image description here

我想知道的是,是否有办法让它的前半部分为蓝色col="blue",其余部分为红色"col="red"

类似的问题但在Matlab而不是R:Here

2 个答案:

答案 0 :(得分:2)

你可以简单地在下半场使用线条:

dat <- rnorm(200, 5, 2)
plot(1:100, dat[1:100], col = "blue", type = "l", xlim = c(0, 200), ylim = c(min(dat), max(dat)))
lines(101:200, dat[101:200], col = "red")

enter image description here

答案 1 :(得分:2)

不是基础R解决方案,但我认为这是使用绘制它的方法。有必要准备一个数据框来绘制数据。

set.seed(1234)

vec <- rnorm(200,5,2)

dat <- data.frame(Value = vec)
dat$Group <- as.character(rep(c(1, 2), each = 100))
dat$Index <- 1:200

library(ggplot2)

ggplot(dat, aes(x = Index, y = Value)) +
  geom_line(aes(color = Group)) +
  scale_color_manual(values = c("blue", "red")) +
  theme_classic()

enter image description here

我们也可以使用具有相同数据框的包。

library(lattice)
xyplot(Value ~ Index, data = dat, type = 'l', groups = Group, col = c("blue", "red"))

enter image description here

请注意,蓝线和红线已断开连接。不确定这是否重要,但如果你想绘制一条连续线,这里是中的一种解决方法。我们的想法是对下半部分的数据框进行子集化,将整个数据框的颜色绘制为蓝色,然后将第二个数据框的颜色绘制为红色。

dat2 <- dat[dat$Index %in% 101:200, ]

ggplot(dat, aes(x = Index, y = Value)) +
  geom_line(color = "blue") +
  geom_line(data = dat2, aes(x = Index, y = Value), color = "red") +
  theme_classic()

enter image description here