【问题标题】:Draw a barplot by row using R使用 R 逐行绘制条形图
【发布时间】:2020-04-08 09:37:05
【问题描述】:

我有这个数据框

names    var1    var2    var3    var4   ...   var51
name1   33.87   31.52   18.73   13.71   ...    0.17
name2   36.18   25.07   19.85   16.33   ...    0.21
name3   34.29   22.68   20.37   12.09   ...    0.36
...       ...     ...     ...     ...   ...     ...
name19  46.98   20.42   14.54   15.77   ...    0.18

我需要使用 R 逐行绘制一个新的条形图。

我试过了:

for (i in df$names)
        barplot(height = df[names == i,],
                beside = TRUE,
                main = i,
                ylim = c(0,100),
                names = colnames(df[,c(2:53)]),
                las = 1,
                col = "lightblue")

但我收到此错误:

Error in barplot.default(height = df[names == i,], beside = TRUE, main = p[1, 1], ylim = c(0,  : 
  'height' must be a vector or a matrix

过滤器 (df[names == i]) 似乎没问题,但我不知道我做错了什么...

【问题讨论】:

  • 请通过dput()提供最少的可重复数据。

标签: r dataframe for-loop row bar-chart


【解决方案1】:

正如错误消息所示,barplot 想要一个 matrix

op <- par(mfrow=c(1, 3))  ## set par
for (i in dat$names) {
  barplot(height = as.matrix(dat[dat$names == i,-1]),
          beside = TRUE,
          main = i,
          ylim = c(0,100),
          # names = colnames(dat[,-1]),
          las = 1,
          col = "lightblue")
}
par(op)  ## reset par

结果

没有for循环你可以使用by

op <- par(mfrow=c(1, 3))  ## set par
by(dat, dat$names, function(x) 
  barplot(as.matrix(x[-1]), beside=TRUE, ylim=c(0, 100), las=1, 
          col="lightblue", main=x[1]
  ))
par(op)  ## reset par

数据

dat <- read.table(text="names    var1    var2    var3    var4      var51
name1   33.87   31.52   18.73   13.71       0.17
name2   36.18   25.07   19.85   16.33       0.21
name3   34.29   22.68   20.37   12.09       0.36", header=TRUE)

【讨论】:

  • 非常欢迎@Viskovitz 这是列数,记住:第一行,第二列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
相关资源
最近更新 更多