Zdaję sobie sprawę, że to jest stare, ale może ta funkcja, którą stworzyłem, przyda się komuś:
order_axis<-function(data, axis, column)
{
# for interactivity with ggplot2
arguments <- as.list(match.call())
col <- eval(arguments$column, data)
ax <- eval(arguments$axis, data)
# evaluated factors
a<-reorder(with(data, ax),
with(data, col))
#new_data
df<-cbind.data.frame(data)
# define new var
within(df,
do.call("<-",list(paste0(as.character(arguments$axis),"_o"), a)))
}
Teraz dzięki tej funkcji możesz interaktywnie kreślić za pomocą ggplot2, na przykład:
ggplot(order_axis(df, AXIS_X, COLUMN_Y),
aes(x = AXIS_X_o, y = COLUMN_Y)) +
geom_bar(stat = "identity")
Jak widać, order_axis
funkcja tworzy kolejną ramkę danych z nową kolumną o tej samej nazwie, ale z _o
końcówką. Ta nowa kolumna ma poziomy w kolejności rosnącej, więc ggplot2 automatycznie kreśli w tej kolejności.
Jest to nieco ograniczone (działa tylko dla kombinacji znaków lub czynników i liczb w kolejności rosnącej), ale nadal uważam, że jest bardzo przydatne do kreślenia w ruchu.