2013-05-06 39 views
8

Tôi muốn tạo một ô có mặt với lề trong ggplot2. Tuy nhiên, tôi muốn cốt truyện lề có màu sắc theo từ khía cạnh nào mà điểm cụ thể đã được bắt nguồn. Đây có thể là minh họa tốt nhất với một ví dụ:Điểm tô màu theo hệ số bên lề của một ô ggplot2 mặt trong R

library(ggplot2) 

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() 
p + facet_grid(.~gear, margins = TRUE) 

Trong cốt truyện lề dán nhãn là "(tất cả)", tôi muốn những chấm có "dụng cụ = 3" để được vẽ với một màu sắc, những người có "thiết bị = 4 "với một màu thứ hai, và những người có" gear = 5 "với một thứ ba.

Cái này không thực hiện công việc:

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(col=gear)) 
p + facet_grid(.~gear, margins = TRUE) 

Có cách nào để đạt được những gì mà tôi muốn?

Trả lời

3

Làm cách nào để tạo biến mới làm tham chiếu và tô màu cho điểm đó? Dường như để làm việc được cung cấp bạn không nhớ các điểm trong 3 khía cạnh đầu tiên được tô màu quá.

mtcars$ref <- as.factor(mtcars$gear) 

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(col=as.factor(gear))) 
p + facet_grid(.~ref, margins = TRUE) 

All points coloured by gear

EDIT: Tôi đã quản lý để có được nó để loại bỏ phím màu từ 3 khía cạnh đầu tiên nhưng không phải không có chơi đùa với các dữ liệu gốc;

Sao chép dữ liệu ban đầu (vì vậy có 2 bản ghi) sau đó thay vì sử dụng một ô lề để tạo ra khía cạnh "tất cả", sử dụng bản ghi dự phòng thay thế.

library(ggplot2) 

mtcars$ref <- (mtcars$gear) 

# create the duplicate 
dat <- do.call("rbind", replicate(2, mtcars, simplify = FALSE)) 

# give the duplicates a false value for "gear" so they can be plotted together 
#This value can then be used for faceting, grouping everything with "all". 

dat$ref[1:32] <- "all" 


# where not in the "all" facet, change "gear" to one (so they are plotted with the same colour) 
dat$gear[dat$ref != "all"] <- 1 

# then plot using ref as the facet and gear to colour points. 

p <- ggplot(dat, aes(mpg, wt)) + geom_point(aes(col=as.factor(gear))) 
p + facet_grid(.~ref, margins = F) 

Points only coloured by gear in final facet

Tôi không chắc đó là cách tốt nhất để đi về nó nhưng có lẽ người có chuyên môn hơn có thể có thể tư vấn?

+0

Ok, cảm ơn, đó là một ý tưởng thực sự tốt và đơn giản! Hạn chế duy nhất là trong trường hợp đó tôi không thấy một cách để loại bỏ các màu sắc từ các ô phi lợi nhuận. Bạn có thực sự có bất kỳ ý tưởng tại sao 'col (gear)' (hoặc 'col = (as.factor (gear))') không hoạt động, nhưng 'col = ref' làm gì? – AnjaM

+1

Chỉnh sửa có tốt hơn không? Không phải là giải pháp thanh lịch nhất nhưng hy vọng nó sẽ giúp. Tôi nghĩ rằng nó phải làm với việc xác định cả hai màu sắc và faceting với cùng một biến, ggplot cho mỗi khía cạnh màu sắc riêng của nó. –

+1

@AnjaM bạn có thể thử thêm 'scale_color_manual (values ​​= c (" black "," red "," green "," blue "))'. 'col = (as.factor (gear))' sẽ không hoạt động nhưng 'col = as.factor (gear)' nên – Carson

1

tùy chọn khác sẽ được để tạo ra các lô mặt và âm mưu lợi riêng biệt và sử dụng thư viện gridExtra để kết hợp chúng:

library(ggplot2) 
library(gridExtra) 
mtcars$ALL <- "all" 
p <- ggplot(mtcars, aes(mpg, wt)) 
p1 <- p + geom_point() + facet_grid(.~gear) 
p2 <- p + geom_point(aes(color=factor(gear))) + facet_grid(.~ALL) 
grid.arrange(p1, p2, ncol=2) 

enter image description here

+0

Cảm ơn, đó cũng là một ý tưởng hay! Tôi không biết rằng việc sắp xếp các ô 'ggplot2' rất dễ dàng! – AnjaM

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