我想要达到的目标与此处已经提到的完全相同(特别是使用R&#39的基础图形,而不是像ggplot
或lattice
这样的包):Ordering bars in barplot()
然而,那里提出的解决方案似乎对我没有用。我需要的是以下内容。假设我有这个:
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:length(num)])
data <- data.frame(num, cat)
如果我使用barplot(data$num)
生成条形图,这就是我得到的结果:
现在,我想根据data$cat
对小节进行重新排序。按照我上面提到的链接,我尝试了接受的答案,但收到了错误:
num2 <- factor(num, labels = as.character(cat))
Error in factor(num, labels = as.character(cat)) : invalid 'labels'; length 10 should be 1 or 9
然后我也尝试了另一个答案:
num <- as.factor(num)
barplot(table(num))
但这是我得到的:
因此,在我的这个特殊情况下,与该问题略有不同,我应该如何订购条形图,以便条形由data$num
定义,但是根据data$cat
排序?
答案 0 :(得分:9)
您可以使用ggplot来执行此操作
.searchWrapper div > img.animate-opacity {
使用基本功能
library("ggplot2")
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
ggplot(data,aes(x= reorder(cat,-num),num))+geom_bar(stat ="identity")
答案 1 :(得分:5)
我得到以下内容,
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
barplot(data[order(data[,1],decreasing=TRUE),][,1],names.arg=data[order(data[,1],decreasing=TRUE),][,2])
上面的代码使用order()函数两次(参见下面的注释)。为了避免这样做,有序data.frame的结果可以存储在一个新的data.frame中,这可以用来生成条形图。
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
data2 <- data[order(data[,1],decreasing=TRUE),]
barplot(data2[,1],names.arg=data2[,2])
答案 2 :(得分:0)
或者,如果您不想将数据放入新的数据框中,也可以使用以下内容。只是简单一点。
barplot(sort(data$num, decreasing = TRUE))