Линейчатая диаграмма R, сортировка по значению

#r #bar-chart #plotly

#r #столбчатая диаграмма #линейная диаграмма

Вопрос:

У меня есть линейчатая диаграмма с категориями по оси X и подсчетами по Y. Есть ли способ отсортировать столбцы в порядке убывания значений Y?

это пример кода

 Animals <- c("giraffes", "orangutans", "monkeys")
Count <- c(20, 14, 23)
data <- data.frame(Animals, Count)

data <- arrange(data,desc(Count))

plot_ly(data, x = ~Animals, y = ~Count, type = 'bar', name = 'SF Zoo')
  

Несмотря на упорядочивание данных по количеству перед графиком, я по-прежнему получаю столбцы, отсортированные в алфавитном порядке по названиям животных.

спасибо, Манодж

Ответ №1:

Пара вещей:

  1. Посмотрите, str(data) ваш Animals вектор символов приведен к множителю, если вы не укажете stringsAsFactors = FALSE в своем вызове data.frame . Уровни этого коэффициента по умолчанию расположены в алфавитном порядке.
  2. Даже если Animals она создана как символьный вектор в data , plot_ly она не знает, что делать с символьными переменными, и поэтому принудительно преобразует их в факторы.

Вам нужно установить порядок уровней факторов, чтобы получить требуемый порядок убывания.

 Animals <- c("giraffes", "orangutans", "monkeys")
Count <- c(20, 14, 23)
data <- data.frame(Animals, Count, stringsAsFactors = FALSE)
data$Animals <- factor(data$Animals, levels = unique(data$Animals)[order(data$Count, decreasing = TRUE)])
plot_ly(data, x = ~Animals, y = ~Count, type = "bar", name = 'SF Zoo')
  

введите описание изображения здесь

Комментарии:

1. Спасибо Джефф, я пробовал использовать tab <- arrange(tab, desc(n)) перед построением графика, но это не сработало. Я также указал sort = FALSE в plotly, чтобы убедиться, что он не прибегает, но все равно не работает.

2. Если tab$Category является фактором, то plot_ly в качестве порядка отображения графика будет использоваться порядок уровней. Вам нужно будет изменить порядок tab$Category заданных tab$Count уровней. Вы можете найти stats::reorder функцию полезной: tab$Category <- reorder(x = tab$Category, X = tab$Count, FUN = sum)

3. Привет, Джефф, мои категории не являются факторами, и таблица правильно сортируется перед построением графика. Однако plot_ly сортирует мои категории в алфавитном порядке при создании графика. Это происходит точно так же, как в примере ниже, где животные отображаются на диаграмме в алфавитном порядке, несмотря на порядок, указанный ниже plot_ly( x = c («жирафы», «орангутанги», «обезьяны»), y = c (20, 14, 23), name = «SF Zoo», type = «bar»)

4. Идеальный. Спасибо, Джефф!

5. существует ли удобная для всех версия этого ответа? было бы здорово использовать это в одном операторе перед созданием plot_ly объекта … как отмечалось выше, даже если arrange(desc(Count)) используется в качестве предыдущего оператора, это не работает

Ответ №2:

чтобы отсортировать столбцы по убыванию их значения, вам нужно использовать атрибут layout xaxis следующим образом:

 plot_ly(data, x = ~Animals, y = ~Count, type = 'bar', name = 'SF Zoo') %>% 
  layout(xaxis = list(categoryorder = "total descending"))
  

Комментарии:

1. Это должен быть принятый ответ. Она работала «из коробки» без каких-либо манипуляций с данными. Спасибо, филлиооо.