如何使用多个变量从聚合数据中获取条形图下的列名称?

问题描述 投票:0回答:1

我有一个名为 ufc.csv 的包含树木数据的数据文件,在使用 read.csv() 函数读取它后,我使用聚合函数来获取已排序的树直径 (Dbh) 和树高度 (Height) 的平均值按物种名称(物种):

ufcmeans = aggregate(x = ufc[,4:5], by = ufc[3], FUN = mean, na.rm = TRUE)

第一行是空的,所以,用 ufcmeans[-1,] 删除它后,我得到这个数据框:

Species Dbh Height
2 DF 383.7143 254.3036
3 ES 403.3333 280.0000
4 F 372.0000 270.0000
5 FG 381.5000 275.0000
6 GF 351.5838 242.6522
7 HW 209.0000 198.0000
8 LP 232.8571 218.3333
9 PP 568.5000 330.0000
10 SF 136.4286 154.1000
11 WC 375.0757 234.8777
12 WL 340.0588 252.5714
13 WP 319.7273 251.3939

我的目标是制作一个条形图,其中 Dbh 和高度的平均值交替并按物种组织,每对列下都有物种名称(因此前两列是第一个 Dbh 和高度的平均值,名称“DF”都在它们下面,依此类推)。

首先,我尝试使用

as.matrix()
函数将 ufcmeans 制作为名为meansmatrix 的矩阵,然后将其插入到
barplot()
函数中,但出现错误:

> barplot(meansmatrix, beside=TRUE, col=c("red","blue"))
Error in -0.01 * height : non-numeric argument to binary operator

接下来,我尝试制作一个没有物种列的矩阵,并且我能够在一张图表上制作两个条形图,但物种名称不在那里(这是有道理的,因为我删除了它),所以我尝试使用names.arg 语句包含物种名称,但我收到错误消息,指出没有足够的名称。

如何使用

barplot()
函数获得我设想的条形图?

r aggregate bar-chart rstudio
1个回答
2
投票

你在找这个吗?

barplot(cbind(Dbh, Height) ~ Species, dat, beside=TRUE, legend.text=names(dat)[2:3])


数据:

dat <- read.table(header=TRUE, text='
                  Species Dbh Height
2 DF 383.7143 254.3036
3 ES 403.3333 280.0000
4 F 372.0000 270.0000
5 FG 381.5000 275.0000
6 GF 351.5838 242.6522
7 HW 209.0000 198.0000
8 LP 232.8571 218.3333
9 PP 568.5000 330.0000
10 SF 136.4286 154.1000
11 WC 375.0757 234.8777
12 WL 340.0588 252.5714
13 WP 319.7273 251.3939')
© www.soinside.com 2019 - 2024. All rights reserved.