排列/排序数据条的堆栈条形图

时间:2019-06-25 10:54:37

标签: r dataframe plot bar-chart

我是R的新手。我希望使用barplot(as.matrix(df))创建数据框'df'的堆叠条形图。问题是我希望排列数据框的列,以使图的条形按其长度的降序排列。 df是:

      A  B  C  D
val1  12 5  20 18
val2  20 15 28 7

Stacked barplot

我尝试了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))

3 个答案:

答案 0 :(得分:1)

在绘制之前,您可以按负数colSums对数据框列进行排序。

barplot(as.matrix(df[, order(-colSums(df))]))

产量

enter image description here

数据

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)