【问题标题】:how to plot the 4 ggplot in onepage in a loop? [duplicate]如何在一个循环中在一个页面中绘制 4 ggplot? [复制]
【发布时间】:2021-01-20 07:51:42
【问题描述】:

我想在一个页面中绘制 4 个 ggplot 图形,并在一个循环中的一个图形中绘制 4 行。 我现在唯一能做的就是分别绘制 4 个图。

有什么聪明的方法吗? 谢谢

library(ggplot2)


dataset1<-c(1,5,12,21,30,50,90,100)
dataset2<-c(10,15,120,210,300,50,90,100)
dataset3<-c(1,5,12,21,30,50,900,1000)
Date = c("2020/07/16","2020/07/23","2020/07/30","2020/08/06","2020/08/13","2020/08/20","2020/08/27","2020/09/13")

datatotal<-c(dataset1,dataset2,dataset3)
Groups<-3
datamatrix1<-matrix(datatotal,length(dataset1),Groups)

plot1g<-function(dataset)
{y<-dataset/10*dataset[1]
df <- data.frame(y, Date = as.Date(Date))
ggplot(df) + aes(Date, y) + geom_line()}



plot4g<-function(datamatrix)
{
  
  for(i in 1:dim(datamatrix)[2]) 
{
  print(plot1g(datamatrix[,i]))
  
}}
  
  
  
  
  

 
  
 plot4g(datamatrix1) 

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    正如另一个答案所暗示的,这样做的“智能”方法是将数据重塑为长格式,但要回答您的问题,您可以在循环之外定义一个空的 ggplot 对象,然后按顺序添加图层:

    p <- ggplot()
    for(i in 1:dim(datamatrix1)[2]) 
    {
      y <- datamatrix1[,i]/(10*datamatrix1[1, i])
      df <- data.frame(y, Date = as.Date(Date))
      p <- p + geom_line(data = df, aes(Date, y), color = i)
    }
    p
    

    【讨论】:

      【解决方案2】:

      如果您重组数据,只需拨打ggplot 即可完成。这是使用tidyr::pivot_longer 的示例。我稍微更改了数据以使情节看起来更有趣。

      library(ggplot2)
      library(tidyr)
      
      dataset1<-c(100,50,110,21,31,40,80,100)
      dataset2<-c(10,15,120,22,30,50,90,100)
      dataset3<-c(1,1,2,21,30,50,90,100)
      Date <- as.Date(c("2020/07/16","2020/07/23","2020/07/30","2020/08/06","2020/08/13","2020/08/20","2020/08/27","2020/09/13"))
      
      df <- data.frame(dataset1, dataset2, dataset3, Date, stringsAsFactors = F) %>% 
          pivot_longer(c(dataset1, dataset2, dataset3))
      
      ggplot(data=df, aes(x=Date, y=value, col=name)) + geom_line()
      

      【讨论】:

      • 谢谢。所以如果我想在我的代码中绘制我的 y,我需要将 y 存储在一个三维数组中,对吗?
      • 您需要使用pivot_longer 将宽格式转换为长格式。在我的示例中,宽格式数据中有 4 列,长格式数据减少到 3 列,但行数增加以反映宽格式数据中的不同组合。
      猜你喜欢
      • 2012-11-30
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多