【问题标题】:How to draw multiple lines on a single plot in R all with different colours?如何在R中的单个图上绘制多条不同颜色的线?
【发布时间】:2015-09-28 11:37:26
【问题描述】:

我有一个数据集,其中包含连续横断面的三种鱼类的累积计数,因此它包含 3 列(物种、计数、横断面);

例如

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

任何帮助将非常感谢!

【问题讨论】:

标签: r plot colors


【解决方案1】:

问题是每次调用lines() 时,您都在应用相同的颜色。为防止这种情况,您需要在每次调用lines() 时迭代颜色向量。请注意,由于您正在迭代 Data$Species,因此您实际上在这里覆盖了 3 次行——您可能打算使用 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)) 

【讨论】:

    【解决方案2】:

    简短的回答是看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])
    }
    

    执行时将绘制:

    【讨论】:

    • 谢谢,太好了,需要开始习惯使用 ggplot 但我现在明白我的代码出了什么问题!谢谢
    • 请务必查看rweb.stat.ucla.edu/ggplot2 - 非常互动/信息丰富。
    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2023-03-19
    • 2022-01-15
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多