在R&#39的条形图()

时间:2016-05-27 10:22:09

标签: r sorting bar-chart

我想要达到的目标与此处已经提到的完全相同(特别是使用R&#39的基础图形,而不是像ggplotlattice这样的包):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排序?

3 个答案:

答案 0 :(得分:9)

您可以使用ggplot来执行此操作

.searchWrapper div > img.animate-opacity {

结果如下所示 enter image description here

使用基本功能

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")

enter image description here

答案 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))