Tôi nhận ra điều này là cũ, nhưng có lẽ chức năng này, tôi tạo ra rất hữu ích với ai đó ngoài kia:
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)))
}
Bây giờ, với chức năng này bạn tương tác có thể vẽ với ggplot2, như thế này:
ggplot(order_axis(df, AXIS_X, COLUMN_Y),
aes(x = AXIS_X_o, y = COLUMN_Y)) +
geom_bar(stat = "identity")
Có thể thấy,Hàmtạo một khung dữ liệu khác với một cột mới có tên giống nhau nhưng với một số _o
ở cuối. Cột mới này có các cấp theo thứ tự tăng dần, vì vậy ggplot2 tự động vẽ theo thứ tự đó.
Điều này hơi bị hạn chế (chỉ hoạt động đối với kết hợp ký tự hoặc yếu tố và số cột và theo thứ tự tăng dần) nhưng tôi vẫn thấy nó rất hữu ích khi vẽ trên đường đi.
Tôi bị sốc câu trả lời này không có nhiều upvotes, 90% thời gian này là cách thích hợp để làm điều đó. – Gregor
Tôi nghĩ cả hai cuộc gọi yếu tố đều không cần thiết. Có một cuộc gọi ngầm định đến yếu tố cho đối số đầu tiên và đối số thứ hai của hte được giả định là số. –