Упорядочить / отсортировать столбцы данных для столбчатой ​​диаграммы с накоплением - PullRequest
0 голосов
/ 25 июня 2019

Я новичок в R. Я хочу создать столбчатую диаграмму в стеке данных для фрейма 'df', используя barplot(as.matrix(df)).Проблема в том, что я хочу расположить столбцы данных таким образом, чтобы столбцы графика располагались в порядке убывания их длины.Значение df:

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

Stacked barplot.

Я попробовал функцию reorder, но это изменило ширину стержней, делая некоторые стержни тоньше, а некоторые толще.

Я хочу, чтобы столбцы были в порядке-> CADB

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 ]

1 голос
/ 25 июня 2019

Вы можете упорядочить столбцы фрейма данных по отрицательному значению 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"))
0 голосов
/ 25 июня 2019

Проблема в том, что вы можете не хотеть сортировать по строке, но вы можете легко сортировать по столбцам. Надеюсь, это то, что вы хотите

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)
0 голосов
/ 25 июня 2019

Простой и мануальный способ - просто установить порядок столбцов:

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