【问题标题】:Plot multiple lines in one graph [duplicate]在一张图中绘制多条线[重复]
【发布时间】:2013-06-13 13:32:21
【问题描述】:

尝试使用 ggplot 将多条线绘制成一张图,但不确定如何使用我的数据集。不确定我是否需要更改数据结构(转置?)

数据如下所示:

Company   2011   2013
Company1  300    350
Company2  320    430
Company3  310    420

我也试了一下:

Year   Company1  Company2  Company3
2011   300       320       310 
2013   350       430       420

为此,我可以使用以下方法绘制 1 个值;

ggplot(data=df, aes(x=Year, y=Company1)) + geom_line(colour="red") + geom_point(colour="red", size=4, shape=21, fill="white")

但我不知道如何合并所有公司,因为我没有对象“公司”可以分组。有什么建议吗?

【问题讨论】:

    标签: r ggplot2 linegraph


    【解决方案1】:

    @Federico Giorgi 的回答非常好。它帮助了我。 因此,我做了以下操作,为了从单个数据集的数据在同一个图中生成多条线,我使用了 for 循环。也可以添加图例。

    plot(tab[,1],type="b",col="red",lty=1,lwd=2, ylim=c( min( tab, na.rm=T ),max( tab, na.rm=T ) )  )
    for( i in 1:length( tab )) { [enter image description here][1]
    lines(tab[,i],type="b",col=i,lty=1,lwd=2)
      } 
    axis(1,at=c(1:nrow(tab)),labels=rownames(tab))
    

    【讨论】:

      【解决方案2】:

      您可以使用原生 R 函数,而不是使用 ggplot2 所需的极其复杂的数据结构:

      tab<-read.delim(text="
      Company 2011 2013
      Company1 300 350
      Company2 320 430
      Company3 310 420
      ",as.is=TRUE,sep=" ",row.names=1)
      
      tab<-t(tab)
      
      plot(tab[,1],type="b",ylim=c(min(tab),max(tab)),col="red",lty=1,ylab="Value",lwd=2,xlab="Year",xaxt="n")
      lines(tab[,2],type="b",col="black",lty=2,lwd=2)
      lines(tab[,3],type="b",col="blue",lty=3,lwd=2)
      grid()
      legend("topleft",legend=colnames(tab),lty=c(1,2,3),col=c("red","black","blue"),bg="white",lwd=2)
      axis(1,at=c(1:nrow(tab)),labels=rownames(tab))
      

      【讨论】:

      • '异常复杂的数据结构'有点强大。我发现使用这种形状的数据很有帮助
      • 感谢您对“极其复杂的数据结构”的声明!非常感谢!
      【解决方案3】:

      您应该将您的数据转换为长(即熔融)格式,以便与ggplot2 一起使用:

      library("reshape2")
      mdf <- melt(mdf, id.vars="Company", value.name="value", variable.name="Year")
      

      然后你必须使用aes( ... , group = Company ) 对它们进行分组:

      ggplot(data=mdf, aes(x=Year, y=value, group = Company, colour = Company)) +
          geom_line() +
          geom_point( size=4, shape=21, fill="white")
      

      【讨论】:

      • df 不会覆盖stats::dfR 通过上下文知道您指的是哪一个。自己试试吧:df &lt;- data.frame(A=1:10) ; df(df$A, 1, 5)
      • @SeñorO 这就是我已经多次阅读的内容,但你是对的,它没有被覆盖。因此,请注意:切勿在没有自己检查的情况下将信息传递给其他人 :-) 我编辑了我的问题。
      • 避免df 作为变量名仍然是个好主意——如果你经常使用它(像我一样,违背我自己的建议),那么有时当你忘记定义它时,你得到神秘的错误“df$foo 中的错误:'closure' 类型的对象不是子集”,而不是像“错误:找不到对象 'df'”这样更好的错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2012-03-21
      • 1970-01-01
      • 2013-01-14
      相关资源
      最近更新 更多