在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))
对于使用基本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()