【问题标题】:How to do a bar plot in a for loop for each variable?如何在 for 循环中为每个变量绘制条形图?
【发布时间】:2022-01-05 23:09:56
【问题描述】:

我不知道为什么这段代码不起作用我尝试了所有方法。我正在尝试为 mycatvar 中的每个变量(这是 2 个变量)与组(这是治疗或控制)做一个条形图。

NumVars =    
nnumvar  = Data[c(2,4,5,6,7,8)]   
MyTotTitles = c("titles..")  
CatVars =   
mycatvar = Data[c(1,3)]   
MyCatTitles = c("??? by Treatment Group", "??? by Treatment Group")for (i in 1:ncol(mycatvar)){
  y=mycatvar[,i] 
  mytitle= paste(mycatvar[i],"By Treatment Group")
  myxlab= mycatvar[i]
  myylab= "Group"
  n.var=ncol(Data)
  GNames = c("Control", "Treatment") 
    
  GFREQS=table(mycatvar[,i],Data[,9])
  GFREQS 

  XTFREQS=table(Data[,9],mycatvar[,i])
  XTFREQS
  barplot(GFREQS,horiz=TRUE,
      col=c("red","blue"),
      names.arg= GNames, cex.names=2,
      main=mytitle,
      xlab=myxlab,
      ylab=myylab)
}

结果如下:

【问题讨论】:

  • 最好有一个小的代表性数据集来了解您的数据的结构。
  • 请edit your post提供数据,然后删除这条长评论。此外,该数据不可重现。 Data 是什么?请发布dput(mydata)的输出。
  • 做到了。 Data 是发布输出的方式。

标签: r for-loop


【解决方案1】:

在不了解更多数据的情况下,问题可能出在您的标题和 x 标签变量上,其中mycatvar[i] 通过nrows 返回一列的数据框,而不是单个 值。因此,输出会在顶部以粗体标题转储所有列值,在底部转储 x 标签的所有列值。

具体见当前行的cmets:

for (i in 1:ncol(mycatvar)){
  y=mycatvar[,i]                                    # ASSIGNED, NEVER USED
  mytitle= paste(mycatvar[i],"By Treatment Group")  # PASTE ENTIRE COLUMN OF VALUES
  myxlab= mycatvar[i]                               # LABEL ENTIRE COLUMN OF VALUES
  myylab= "Group"
  n.var=ncol(Data)                                  # ASSIGNED, NEVER USED
  ...
}

很可能,您的意思是返回单个值的对应列的名称。

for (i in 1:ncol(mycatvar)){
  mytitle <- paste( 
      colnames(mycatvar)[i],           # PASTE SINGLE VALUE
      "By Treatment Group"
  )
  myxlab <- colnames(mycatvar)[i]      # LABEL SINGLE VALUE
  myylab <- "Group" 
  ...

}

或者,您可以遍历列名并将其传递到提取器 [[ 调用中。下面去掉不使用的赋值变量,使用赋值运算符&lt;-:

for (col in colnames(mycatvar)){
  mytitle <- paste(col, "By Treatment Group")
  myxlab <- col
  myylab <- "Group"

  GNames <- c("Control", "Treatment")     
  GFREQS <- table(mycatvar[[col]], Data[,9])
  GFREQS 

  XTFREQS <- table(Data[,9], mycatvar[[col]])
  XTFREQS

  barplot(
     GFREQS,
     horiz = TRUE,
     col = c("red","blue"),
     names.arg = GNames, 
     cex.names = 2,
     main = mytitle,
     xlab = myxlab,
     ylab = myylab
  )
}

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 2021-05-14
    • 2016-02-09
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多