Có vẻ như bạn muốn vẽ chúng theo một số thứ tự dựa trên giá trị 50% của mỗi ô ô? Lấy một khung dữ liệu khác làm ví dụ:
temp <- structure(list(
Grade = c("U","G", "F", "E", "D", "C", "B", "A", "A*"),
n = c(20L, 13L, 4L, 13L, 36L, 94L, 28L, 50L, 27L)),
.Names = c("Grade", "n"),
class = c("tbl_df", "data.frame"),
row.names = c(NA, -9L))
Nếu chúng tôi vạch ra điều này, chúng ta có thể thấy các nhãn bị sai lệch (A đến trước A *).
library(ggplot2)
ggplot(temp) +
geom_bar(stat="identity", aes(x=Grade, y=n))
Chúng ta có thể đặt hàng này một cách thủ như trình bày ở trên, hoặc chúng ta có thể quyết định để vẽ các lớp theo thứ tự số lượng sinh viên nhận được từng lớp. Đây cũng có thể được thực hiện bằng tay, nhưng nó sẽ tốt hơn nếu chúng ta có thể tự động hoá này:
Đầu tiên chúng tôi ra lệnh cho dataframe:
library(dplyr)
temp <- temp %>% arrange(n)
Sau đó chúng tôi thay đổi cấp độ bên trong cột Grade
để đại diện cho thứ tự của các dữ liệu
temp$Grade <- as.vector(temp$Grade) #get rid of factors
temp$Grade = factor(temp$Grade,temp$Grade) #add ordered factors back
Chạy cùng một biểu đồ lệnh được hiển thị ở trên cung cấp cho bạn dữ liệu được vẽ bằng trục x được sắp xếp khác.
Thảo luận nhiều hơn ở đây: http://stackoverflow.com/questions/11587111/setting-levels-when-creating-a-factor-vs-levels – harkmug