使用R逐行绘制条形图

劳尔·卡萨多

我有这个数据框

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逐行绘制一个新的barplot。

我尝试了这个:

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])看起来不错,但我不知道我在做什么错...

杰伊

如错误消息所示,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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章