2011-07-29 27 views
13

Câu hỏi này theo sau từ one khác. Tôi không thể thực hiện câu trả lời ở đó.Làm thế nào để thay đổi thứ tự ô vuông khi sử dụng ggplot2?

Xác định:

df2 <- data.frame(variable=rep(c("vnu.shr","vph.shr"),each=10), 
     value=seq(1:20)) 

Lô:

require(ggplot2) 
qplot(variable,value, data=df2,geom="boxplot")+ 
geom_jitter(position=position_jitter(w=0.1,h=0.1)) 

Tôi muốn có boxplots theo thứ tự ngược lại (ví dụ: một ở bên phải bên trái và vân vân).

Tôi đã thử nhiều cách khác nhau để sắp xếp lại các yếu tố bằng cách sử dụng levels, ordered, relevel, rev, v.v.

+0

này đã được xử lý trên SO một số lần. Dưới đây chỉ là hai ví dụ hàng đầu: http://stackoverflow.com/questions/3253641/how-to-change-the-order-of-a-discrete-x-scale-in-ggplot http://stackoverflow.com/ Câu hỏi/5967593/đặt hàng-of-bars-in-ggplot –

+0

@ Roman Luštrik Mà có lẽ đi để cho thấy làm thế nào các yếu tố sắp xếp lại khó hiểu có thể là không được khởi xướng. Tôi cho một, đã cố gắng để sắp xếp các khung dữ liệu để các yếu tố được theo thứ tự chữ cái ngược lại, và sau đó recode nó như là yếu tố. Điều đó không làm việc bc cho yếu tố 'z = c (" b "," a ")' các số cơ bản được áp dụng bởi 'R' theo thứ tự chữ cái (có ý nghĩa) s.t. mã hóa số là 'z = c (2,1)'. Nhưng, bây giờ tôi biết, sắp xếp lại một yếu tố không có gì để làm với sắp xếp lại các khung dữ liệu! Khi sắp xếp lại hệ số chúng ta không sắp xếp lại dữ liệu nhưng thay đổi các số cơ bản thành 'z = c (1,2)' nói. – Fred

+0

Vì mục đích vẽ đồ thị, đó là thứ tự các cấp của một yếu tố xác định thứ tự trong ô. Một khi bạn nhận được rằng dưới da của bạn, đó là một chuyến đi suôn sẻ. Về sự nhầm lẫn về sắp xếp lại ... Bạn đã bao giờ thử xuất ra một âm mưu lưới/ggplot thành một bản pdf chưa? :) Boy, trước khi bạn nhận ra rằng đó không phải là mã của bạn nhưng một câu lệnh 'print' còn thiếu ... –

Trả lời

32

Các bạn đã thử này:

df2$variable <- factor(df2$variable, 
    levels = c('vph.shr','vnu.shr'),ordered = TRUE) 

tôi chỉ chọn một trật tự ở đó, kể từ khi hệ thống của tôi được cấu hình hơi khác hơn của bạn tôi nghi ngờ, vì vậy 'tự mặc định' của tôi có thể khác nhau. Nhưng bạn chỉ có thể chuyển đổi vị trí của các cấp khi chỉ định chúng.

Một vài lựa chọn khác, phụ thuộc vào thị hiếu của bạn:

Đối với chỉ đảo ngược thứ tự hiện tại:

factor(df2$variable,levels = rev(levels(df2$variable)),ordered = TRUE) 

hoặc bạn có thể sử dụng để xác định một Subsetting đặt hàng cụ thể nếu bạn không muốn gõ mỗi cấp bằng tay:

factor(df2$variable,levels = levels(df2$variable)[1:2],ordered = TRUE) 
+0

Cảm ơn, tôi quên rằng có số yếu tố cơ bản ... – Fred

3

Bạn đã chấp nhận một giải pháp (hoàn toàn ổn) nhưng đây là một tùy chọn khác sử dụng relevel(). Tôi không chắc tại sao nó không hiệu quả với bạn?

#default plot 
ggplot(df2, aes(variable, value)) + geom_boxplot() 

enter image description here

#Reverse reverse! 
df2$variable2 <- with(df2, relevel(variable, "vph.shr")) 
ggplot(df2, aes(variable2, value)) + geom_boxplot() 

enter image description here

+4

Làm quen với những hình ảnh? Trường hợp u sử dụng một Commodore 64 hoặc một số thiết bị khác năm 1980? ;-) – Fred

+5

@Fred - Tôi vẽ chúng bằng tay trong sơn microsoft để trông giống như đầu ra từ một thiết bị ggplot. Trên thực tế, tôi đã lưu hình ảnh dưới dạng jpegs nhỏ (2 x 2) để chúng không bị phân tâm ... nhưng bất cứ nơi nào SO lưu trữ hình ảnh đều có ý tưởng riêng về hình ảnh lớn ... – Chase

+2

Tôi yêu [ác pixel] (http://www.youtube.com/watch?v=iBGZPzt5Dts) thẩm mỹ. Rất vui được biết cách sao chép nó. – Fred

Các vấn đề liên quan