2012-06-26 25 views
7

Tôi muốn tạo một cốt truyện điểm với ggplot2 geom_point nơi một biến liên tục được phân tầng bởi các yếu tố khác nhau.ggplot2 lô 3 yếu tố với một số x-trục cắt chuyển

Nó là khá phức tạp, có lẽ tôi đang cố gắng để hiển thị quá nhiều trong một biểu đồ, nhưng tôi có ba yếu tố khác nhau ảnh hưởng đến điều

Tôi muốn thể hiện nó như thế này

p <- ggplot(mtcars[,c(1,2,10,11)], aes(factor(cyl), mpg)) 
p + geom_point(aes(colour = factor(gear), shape=factor(carb))) 

enter image description here

Tuy nhiên tôi muốn chia yếu tố (bánh răng) ra, tức là với mỗi giá trị ba (xy lanh) trên trục x, tôi muốn có khoảng cách nhỏ giữa các yếu tố (bánh răng) khác nhau trên trục x

tức là trong hệ số (cyl) == 4, hệ số (bánh) == 3 là loại trên 3,9, hệ số (bánh) == 4 là trên 4 và hệ số (bánh răng) == 5 là loại trên 4.1. Điều này lặp đi lặp lại cho mỗi yếu tố (cyl) giá trị.

Hy vọng có ý nghĩa

NB đây là ví dụ về đồ chơi. Tôi sẽ làm điều đó bằng cách sử dụng các giá trị phân loại, không phải là số thay vì các con số được xác định; Tôi nhận thấy có giá trị trên 3,9/4,1 là khó hiểu.

+1

tại sao không Facet các dữ liệu trên thiết bị để cung cấp cho ba lô? – John

+0

khía cạnh âm thanh tốt, tôi đang cố gắng tìm ra bằng cách sử dụng này: http://had.co.nz/ggplot2/facet_grid.html –

+1

nếu tìm thấy liên kết này khá hữu ích cho ggplot2 - http://wiki.stdout.org/ rcookbook/đồ thị/ – John

Trả lời

8

Với facet_grid() và mtcars dụ:

library(ggplot2) 
data(mtcars) 

p <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_point(aes(colour=factor(carb))) 
p + facet_grid(. ~ gear) 

By number of gears

+0

Điều này thật tuyệt. Có một cách đơn giản để thay đổi các thuộc tính của văn bản ở trên cùng của các khía cạnh khác nhau (có lẽ đây nên là một câu hỏi riêng biệt!) –

+0

Phế liệu, có một ví dụ tuyệt vời ở đây: http://wiki.stdout.org/ rcookbook/Đồ thị/Khía cạnh% 20% 28ggplot2% 29/(cảm ơn rất nhiều cho liên kết John!) –

4

subset là một cách để thực hiện việc này. Tập hợp dữ liệu theo gears, sau đó định vị tập hợp các điểm cho từng tập con.

library(ggplot2) 

p <- ggplot() 
p + geom_point(data = subset(mtcars[,c(1,2,10,11)], gear == 3), aes(x = as.numeric(factor(cyl)) - 0.1, y = mpg, colour = factor(gear), shape=factor(carb))) + 
    geom_point(data = subset(mtcars[,c(1,2,10,11)], gear == 4), aes(x = as.numeric(factor(cyl)), y = mpg, colour = factor(gear), shape=factor(carb))) + 
    geom_point(data = subset(mtcars[,c(1,2,10,11)], gear == 5), aes(x = as.numeric(factor(cyl)) + .1, y = mpg, colour = factor(gear), shape=factor(carb))) + 
    scale_x_continuous("Cylinders", breaks = c(1,2,3), labels = c(4,6,8), expand = c(.2,0)) 

enter image description here

+0

Điều này làm việc với ví dụ tôi đã đưa ra, nhưng nó sẽ làm việc khi sử dụng một giá trị phân loại thay vì số cho xi lanh? –

+0

Không hiểu tại sao không. Bạn có thể thử nó trên dữ liệu mtcars sau khi một số recoding: 'thư viện (xe hơi); mtcars $ cyl = factor (recode (mtcars $ cyl, "4 = 'Four'; 6 = 'Six'; 8 = 'Eight'"), cấp = c ("Bốn", "Sáu", "Tám")) 'Tôi luôn luôn thích facetting, nhưng giải pháp thực sự làm chính xác những gì bạn yêu cầu. –

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