优雅的方式为线图的特定部分选择颜色?

对于n对坐标x的列表,y是否有一种方法可以绘制特定颜色上不同点之间的直线?

到目前为止我实现的解决方案不是使用绘图功能,而是选择我想要颜色的范围.这是一个例子:

x <- 1:100
y <- rnorm(100,1,100)
plot(x,y ,type='n')
lines(x[1:50],y[1:50], col='red')
lines(x[50:60],y[50:60], col='black')
lines(x[60:100],y[60:100], col='red')

有更简单的方法吗?

是的,这样做的一种方法是使用ggplot.

ggplot要求您的数据采用data.frame格式.在此data.frame中,我添加了一个列col,表示您想要的颜色.然后使用ggplot,geom_line和scale_colour_identity构建绘图,因为col变量已经是一个颜色:

library(ggplot2)

df <- data.frame(
  x = 1:100,
  y = rnorm(100,1,100),
  col = c(rep("red", 50), rep("black", 10), rep("red", 40))
)

ggplot(df, aes(x=x, y=y)) + 
  geom_line(aes(colour=col, group=1)) + 
  scale_colour_identity()

更一般地,每个线段可以是不同的颜色.在下一个例子中,我将颜色映射到x值,给出了一个平滑地将颜色从蓝色变为红色的图:

df <- data.frame(
  x = 1:100,
  y = rnorm(100,1,100)
)

ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=x))

如果您坚持使用基本图形,则使用以下段:

df <- data.frame(
  x = 1:100,
  y = rnorm(100,1,100),
  col = c(rep("red", 50), rep("black", 10), rep("red", 40))
)

plot(df$x, df$y, type="n")
for(i in 1:(length(df$x)-1)){
  segments(df$x[i], df$y[i], df$x[i+1], df$y[i+1], col=df$col[i])
}
相关文章
相关标签/搜索