在R中绘制多条线(数据序列),每条线都有独特的颜色

我是相当新的R和我有以下查询:

我试图在R中生成一个有多行(数据序列)的图。 每一行都是一个类别,我希望它具有独特的颜色。

目前我的代码是这样设置的:

首先,我正在创造一个空的情节:

plot(1,type='n',xlim=c(1,10),ylim=c(0,max_y),xlab='ID', ylab='Frequency') 

然后对于我的每个类别,我正在使用“for”循环来绘制这个空图中的行,如下所示:

 for (category in categories){ lines(data.frame.for.this.category, type='o', col=sample(rainbow(10)), lwd=2) } 

这里有8个类别,所以在剧情中有8条线。 正如你所看到的,我试图从rainbows()函数中抽取一个颜色来为每一行生成一个颜色。

但是,当绘图生成时,我发现有多条线具有相同的颜色。 例如,这8条线中的3条线具有绿色。

我如何让这8条线中的每一条都具有独特的颜色?

另外,如何在情节的传说中体现这种独特性呢? 我试图查找legend()函数,但是不清楚应该使用哪个参数来反映每个类别的这种独特的颜色?

任何帮助或build议将不胜感激。

如果你的数据是宽格式的 matplot是为此而经常被遗忘的:

  dat <- matrix(runif(40,1,20),ncol=4) # make data matplot(dat, type = c("b"),pch=1,col = 1:4) #plot legend("topleft", legend = 1:4, col=1:4, pch=1) # optional legend 

对于那些不熟悉ggplot人来说,还有额外的ggplot ,大多数绘图参数,比如pch等,使用matplot()plot()在这里输入图像说明

如果你想要一个ggplot2解决scheme,你可以做到这一点,如果你可以塑造你的数据到这种格式(见下面的例子)

 # dummy data set.seed(45) df <- data.frame(x=rep(1:5, 9), val=sample(1:100, 45), variable=rep(paste0("category", 1:9), each=5)) # plot ggplot(data = df, aes(x=x, y=val)) + geom_line(aes(colour=variable)) 

ggplot2_geom_line

对于使用基本graphics来说,你有这样做的一般策略,但正如你指出的,你实际上是告诉R从每行10个集合中挑选一个随机颜色。 鉴于此,你偶尔会得到两条相同颜色的线并不奇怪。 这是一个使用基本graphics的例子:

 plot(0,0,xlim = c(-10,10),ylim = c(-10,10),type = "n") cl <- rainbow(5) for (i in 1:5){ lines(-10:10,runif(21,-10,10),col = cl[i],type = 'b') } 

在这里输入图像说明

请注意,使用type = "n"来抑制原始调用中的所有绘图以设置窗口,并在for循环内部对cl进行索引。

使用@Arun虚拟数据:)这里是一个lattice解决scheme:

 xyplot(val~x,type=c('l','p'),groups= variable,data=df,auto.key=T) 

在这里输入图像说明

这里有很好的描述如何添加行

情节()

使用function –

帕(新= T)

选项

http://cran.r-project.org/doc/contrib/Lemon-kickstart/kr_addat.html

要以不同的颜色,你将需要

山坳()

选项。 为了避免多余的轴描述使用

xaxt = “n” 个

yaxt = “n” 个

为第二个和更多的情节。

可以使用lines()函数在同一个图表上绘制多lines()

 # Create the data for the chart. v <- c(7,12,28,3,41) t <- c(14,7,6,19,3) # Give the chart file a name. png(file = "line_chart_2_lines.jpg") # Plot the bar chart. plot(v,type = "o",col = "red", xlab = "Month", ylab = "Rain fall", main = "Rain fall chart") lines(t, type = "o", col = "blue") # Save the file. dev.off() 

OUTPUT 在这里输入图像说明

这是一个示例代码,包括一个图例,如果感兴趣。

 # First create an empty plot. plot(1, type = 'n', xlim = c(xminp, xmaxp), ylim = c(0, 1), xlab = "log transformed coverage", ylab = "frequency") # Create a list of 22 colors to use for the lines. cl <- rainbow(22) # Now fill plot with the log transformed coverage data from the # files one by one. for(i in 1:length(data)) { lines(density(log(data[[i]]$coverage)), col = cl[i]) plotcol[i] <- cl[i] } legend("topright", legend = c(list.files()), col = plotcol, lwd = 1, cex = 0.5) 

我知道,它以前的一个post要回答,但就像我遇到search同一个post,其他人也可能会转过来

通过添加:ggplot函数中的颜色,可以实现与图中出现的组相关的不同颜色的线条。

 ggplot(data=Set6, aes(x=Semana, y=Net_Sales_in_pesos, group = Agencia_ID, colour = as.factor(Agencia_ID))) 

 geom_line() 

与多种颜色的线图