2013-02-13 49 views
52

我是相當新的R和我有以下疑問獨特的色彩:情節多行(數據系列),每個R中

我試圖產生R A曲線圖,有多條線路(數據系列) 。每一行都是一個類別,我希望它具有獨特的顏色。

目前我的代碼是建立在這樣:

首先,我創建一個空的情節:

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()函數,但是不清楚應該使用哪個參數來反映每個類別的這種獨特顏色?

任何幫助或建議將不勝感激。

+2

您可能想要更改col = category,那麼您可能會看到每個系列的不同顏色。你能給我們提供樣品數據嗎? ggplot2可以是一個更容易的選擇。 – 2013-02-13 18:09:43

回答

41

如果你想一個ggplot2的解決方案,你可以做到這一點,如果你可以塑造你的數據格式(見下面的例子)

# 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

21

您有做正確的總體戰略這是使用基礎圖形,但正如你指出的,你基本上告訴R從每行10集中挑選一個隨機顏色。鑑於此,偶爾會有兩條相同顏色的線條並不奇怪。下面是使用基本圖形的例子:

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') 
} 

enter image description here

注意使用type = "n"抑制原始呼叫所有策劃設立窗口,並cl內的索引for循環。

+0

(Imo)R初學者的極佳解決方案:) – 2014-06-19 16:45:43

58

如果你的數據在wide formatmatplot製成,這和經常忘記:

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額外的獎勵,大部分的策劃paramters如pch等。使用matplot()plot()相同。 enter image description here

+1

非常感謝您指出這一點! – SirRichie 2015-03-03 16:42:24

7

使用@Arun虛擬數據:)這裏lattice解決方案:

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

enter image description here

1

這是一個示例代碼,如果感興趣的話,它包含一個圖例。

# 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) 
2

我知道,它的老後回答,但就像我整個搜索同一崗位來了,別人可能會轉向這裏也

通過添加:顏色ggplot功能,我可以實現與圖中出現的組有關的不同顏色的線。

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

geom_line() 

Line Graph with Multiple colors

3

一個以上的線可以在同一圖表上通過使用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 enter image description here

被吸入