r - 使用 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 逐行绘制一个新的条形图。
我试过这个:
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)
推荐阅读
- javascript - 如何在 Amplify 上使用 gatsby 站点地图
- scala - Hudi:在嵌入式模式下访问时间服务器超时
- javascript - 使用 JS 在 HTML 中加载非图像文件
- python - 读取 CSV 中的一个数字并使用 Pandas 进行计算
- r - 对于 R 中的绘图,如何使 y 轴的一部分变大?
- typescript - Nestjs:避免在服务的构造函数中重复表达
- python - 如何在 UUID 字符串中插入连字符?
- php - mysqli查询中的条件
- node.js - 如何使用node js将数据从前端发送到后端
- ios - 如何在 Swift 中延迟几秒钟