Jud*_*ddy 10 sorting r bar-chart
我想要达到的目标与此处已经提到的完全相同(特别是使用R的基本图形,而不是像ggplot或之类的包lattice):在barplot()中订购条形图
但是,那里提出的解决方案似乎对我没有用.我需要的是以下内容.假设我有这个:
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:length(num)])
data <- data.frame(num, cat)
Run Code Online (Sandbox Code Playgroud)
如果我使用生成条形图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
Run Code Online (Sandbox Code Playgroud)
然后我也尝试了另一个答案:
num <- as.factor(num)
barplot(table(num))
Run Code Online (Sandbox Code Playgroud)
但这是我得到的:
所以,在我,这是稍有不同的是问题的这种特殊情况下,我应该如何订购barplot所以酒吧被定义data$num根据,但有序data$cat?
Aru*_*unK 12
你可以使用ggplot来做到这一点
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")
Run Code Online (Sandbox Code Playgroud)
使用基本功能
df <- data[order(data$num,decreasing = TRUE),]
barplot(df$num,names.arg = df$cat)
Run Code Online (Sandbox Code Playgroud)
我得到以下,
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])
Run Code Online (Sandbox Code Playgroud)
上面的代码使用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])
Run Code Online (Sandbox Code Playgroud)