#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:
Пара вещей:
- Посмотрите,
str(data)
вашAnimals
вектор символов приведен к множителю, если вы не укажетеstringsAsFactors = FALSE
в своем вызовеdata.frame
. Уровни этого коэффициента по умолчанию расположены в алфавитном порядке. - Даже если
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. Это должен быть принятый ответ. Она работала «из коробки» без каких-либо манипуляций с данными. Спасибо, филлиооо.