2015-09-28 32 views
1

我有一个数据集,包括三个连续横断的鱼类的累积计数,所以这包括3列(物种,计数,横断面);如何在R中的单个图上用不同的颜色绘制多条线?

例如

Species Count Transect 
Cod  25 1 
Cod  36 2 
Cod  45 3 
Haddock 12 1 
Haddock 23 2 
Haddock 34 3 

等等... 我可能有很多种类的,我想在一个图绘制,所以我试图用一个循环(我第一次去的正确尝试使用循环!!)到加快这和做了以下

xrange <- range(Data$Transect) 
ymax <- max(Data$Count) 
plot(xrange,y=c(0,ymax+10), yaxs = "i", type="n", las=1, xlab="Transect  Number", ylab="Total Number") 
for (i in Data$Species){ 
species <- subset(Data, Species==i) 
lines(species$Transect, species$Count, type="o",lwd=2,lty=1,pch=NA)} 

这将产生一个阴谋与数据与一个单独的行设置所有的物种,但我想这些线有一个独特的颜色和我在努力做到这一点。

我已经尝试了以下,但它不起作用,所有的行仍然出来作为相同的颜色,我不知道接下来要尝试什么?

nspecies <- levels(Data$Species) 
colors<- rainbow(nspecies) 
for (i in Data$Species) { 
species <- subset(Trial, Species==i) 
lines(species$Haul, species$Catch, type="o",lwd=2,lty=1,pch=NA, col=colors[i])} 

任何帮助将是巨大的感谢!

+2

欢迎堆栈溢出!看看ggplot2 http://stackoverflow.com/questions/6364081/plot-lines-in-different-layers-ggplot2?rq=1 – Iris

回答

0

简短的回答是看看ggplot2,因为这远远胜过使用情节。 刚看到上面的工作,这里的工作示例(代码稍作修改):

tt <- "Species Count Transect 
Cod  25 1 
Cod  36 2 
Cod  45 3 
Haddock 12 1 
Haddock 23 2 
Haddock 34 3" 

Data <- read.table(text=tt,header = T) 
xrange <- range(Data$Transect) 
ymax <- max(Data$Count) 

my.levels <- levels(Data$Species) 
my.colors<- rainbow(length(my.levels)) 

plot(xrange, 
    y=c(0,ymax+10), 
    yaxs = "i", 
    type="n", 
    las=1, 
    xlab="Transect Number", 
    ylab="Total Number") 

for (i in 1:length(my.levels)) 
{ 
    species <- subset(Data, Species==my.levels[i]) 
    lines(species$Transect, species$Count, type="o",lwd=2,lty=1,pch=NA, col = my.colors[i]) 
} 

在执行时将绘制:

enter image description here

+0

非常感谢,需要开始习惯使用ggplot,但我明白什么是现在我的代码出错了!谢谢 –

+0

一定要检查http://rweb.stat.ucla.edu/ggplot2 - 非常互动/信息。 – rbm

0

的问题是,随着每次调用lines(),你正在使用相同的颜色。为了防止这种情况发生,每次调用lines()时,都需要迭代一个颜色矢量。请注意,由于您正在遍历Data$Species,因此您实际上在此覆盖了三行,您可能打算使用unique(Data$Species)

但按@虹膜的评论,你可以这样做更容易使用ggplot2

require(ggplot2) 
ggplot(data = Data, aes(x = Transect, y = Count, group = Species)) + 
    xlab("Transect Number") + ylab("Total Number") + 
    geom_line(aes(color = Species)) 
相关问题