Я делаю точечную гистограмму, используя ggplot с дискретной шкалой x, ось x теперь расположена в алфавитном порядке, но мне нужно изменить ее так, чтобы она упорядочивалась по значению оси y (т. Е. Самая высокая полоса будет располагаться слева).
Я попытался упорядочить или отсортировать, но в результате отсортировать ось X, но не столбцы соответственно.
Что я сделал не так?
factor
иreorder
изменение характеристик данных, хотя и в рамкахggplot()
вызова, и это делает больше, чем нужно для решения проблемы.scale_x_discrete(limits = DT$x[order(-DT$y)])+
Вы можете использовать
reorder
:Редактировать:
Чтобы иметь самый высокий бар слева, вы должны использовать немного клуджа:
Я ожидал бы, что у этого также будут отрицательные высоты, но это не так, это работает!
источник
Хэдли разрабатывает пакет под названием
forcats
. Этот пакет делает задачу намного проще. Вы можете использовать,fct_infreq()
когда вы хотите изменить порядок оси X на частоту фактора. В случаеmtcars
примера в этом посте вы хотите изменить порядок уровнейcyl
по частоте каждого уровня. Уровень, который появляется чаще всего, остается слева. Все, что вам нужно, этоfct_infreq()
.Если вы хотите пойти другим путем, вы можете использовать
fct_rev()
вместе сfct_infreq()
.источник
Я понимаю, что это старая, но, может быть, эта функция, которую я создал, будет полезна кому-то там:
Теперь с помощью этой функции вы можете интерактивно построить график с помощью ggplot2, например так:
Как можно видеть,
order_axis
функция создает другой фрейм данных с новым столбцом, названным так же, но с_o
концом в конце. Этот новый столбец имеет уровни в порядке возрастания, поэтому ggplot2 автоматически строит графики в этом порядке.Это несколько ограничено (работает только для символьных или факторных и числовых комбинаций столбцов и в порядке возрастания), но я все еще считаю его очень полезным для построения графиков на ходу.
источник
reorder
. Разве неggplot(df, aes(x = reorder(AXIS_X, COLUMN_Y), y = COLUMN_Y)) + ...
делает то же самое, примерно так же кратко и без вспомогательной функции?