我是R的新手。我希望使用barplot(as.matrix(df))
创建数据框'df'的堆叠条形图。问题是我希望排列数据框的列,以使图的条形按其长度的降序排列。 df是:
A B C D
val1 12 5 20 18
val2 20 15 28 7
我尝试了reorder
函数,但是改变了条形的宽度,使一些条形更细一些。
我希望条形排列-> C-A-D-B
df <- data.frame(
A = c(12,20),
B = c(5,15),
C = c(20,28),
D = c(18,7)
)
rownames(df) <- c("val1","val2")
barplot(as.matrix(df))
答案 0 :(得分:1)
在绘制之前,您可以按负数colSums
对数据框列进行排序。
barplot(as.matrix(df[, order(-colSums(df))]))
产量
数据
df <- structure(list(A = c(12, 20), B = c(5, 15), C = c(20, 28), D = c(18,
7)), class = "data.frame", row.names = c("val1", "val2"))
答案 1 :(得分:0)
一种简单而通用的方法是设置列的顺序:
barplot(as.matrix(df[c("C","A","D","B")]))
答案 2 :(得分:0)
问题是您可能不想基于行进行排序,但是可以轻松地按列进行排序。希望这就是你想要的
mt_trans <- t(matrix(c(12, 5, 20, 18, 20, 15, 28, 7), nrow = 2, byrow = TRUE))
newdata <- t(mt_trans[order(-mt_trans[,1]),])
barplot(newdata)