【问题标题】:Arrange/sort columns of dataframe for a stacked barplot排列/排序堆积条形图的数据框列
【发布时间】:2019-11-07 04:45:13
【问题描述】:

我是 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))

【问题讨论】:

    标签: r dataframe plot bar-chart


    【解决方案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"))
    

    【讨论】:

      【解决方案2】:

      一种简单且手动的方法就是设置列的顺序:

      barplot(as.matrix(df[c("C","A","D","B")]))
      

      【讨论】:

      • 是的,我知道这一点,但如果有很多列,则不实用。
      【解决方案3】:

      问题是您可能不想按行排序,但您可以轻松按列排序。希望这是你想要的

      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)
      

      【讨论】:

        猜你喜欢
        • 2020-03-05
        • 1970-01-01
        • 2017-02-23
        • 2014-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-05
        相关资源
        最近更新 更多