如何在R中的单个绘图上绘制多条线,所有颜色都不同?

时间:2015-09-28 11:37:26

标签: r plot colors

我有一个数据集,包括连续横断面的三种鱼类的累积计数,所以这包括3列(种类,数量,横断面);

e.g。

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 个答案:

答案 0 :(得分:1)

问题是每次调用lines()时,您都应用相同的颜色。为了防止这种情况,您希望每次调用lines()时迭代颜色矢量。请注意,由于您正在迭代Data$Species,因此实际上您在此处三次覆盖行 - 您可能打算unique(Data$Species)

但根据@ Iris的评论,您可以使用ggplot2更轻松地完成此操作:

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

答案 1 :(得分: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