#r #ggplot2 #geom-col
#r #ggplot2 #геометрическая таблица
Вопрос:
У меня есть таблица такого типа:
Year Substance Number
2013 A 32
2013 B 27
2013 C 17
2013 D 17
2013 E 15
2013 F 13
2014 B 20
2014 D 17
2014 A 16
2014 C 11
2014 F 9
2014 G 3
В принципе, до 2018 года в каждом году содержится 6 или 7 веществ, и у каждого вещества есть номер (частота встречаемости). У веществ есть реальные названия, но я не могу опубликовать их в Интернете, поэтому я изменил их на A, B, C, D, E, F и G. Я не могу упорядочить столбцы так, как я хочу, в порядке убывания.
Я провел много исследований в Интернете и перепробовал множество вещей: forcats, factor, levels, reorder и т.д. И Ничего из этого не сработало. Я новичок в R, поэтому сейчас я не совсем понимаю, какой был бы лучший способ сделать то, что я хочу.
Когда я пытаюсь построить график подобным образом, он размещает содержимое в алфавитном порядке:
ggplot(Test, aes(x = Year, y = Number, fill = Substance)) geom_col(position = "dodge")
Для первого года, 2013, порядок правильный. Я хочу, чтобы это выглядело так, в порядке убывания, для каждого второго года. Что я должен делать?
Ответ №1:
Это довольно сложно, потому что ваш порядок меняется с каждым годом, поэтому преобразование факторных переменных становится беспорядочным. Вот один из способов сделать это путем сортировки позиции x с использованием отдельного числового значения:
library('data.table')
library('ggplot2')
Test[, Ranking:= rank(-Number, ties.method = 'first'), by = .(Year)]
ggplot(Test, aes(x = Ranking,
y = Number,
fill = Substance))
geom_col(position = 'dodge')
scale_x_continuous(name = '', breaks = 0)
facet_wrap(~Year)
Вывод:
Комментарии:
1. Спасибо за ваш быстрый ответ 🙂 Когда я пробую ваше решение, у меня появляется следующая ошибка: Ошибка в FUN (X[[i]], …): объект ‘Ranking’ не найден У меня уже есть пакеты ggplot2 и data.table, поэтому я не понимаю, откуда эта ошибка
2. Нет проблем. Похоже, вы не назначили переменную «Ранжирование» — убедитесь, что вы используете первую строку кода:
Test[, Ranking:= rank(-Number, ties.method = 'first'), by = .(Year)]
и, пожалуйста, примите ответ, если это сработает 🙂3. Да, я сделал это, но там написано: Ошибка в
[.tbl_df
(Test, ,:=
(Ranking, rank(-Number, ties.method = «first»)), : неиспользуемый аргумент (by = .(Year)) при попытке запустить первую строку И не волнуйтесь, я приму это 🙂4. убедитесь, что вы
data.table
установили и подключили5. также убедитесь, что
data.table
объект «Тестовый» перед запуском кода:Test <- as.data.table(Test)