2016-09-22 17 views
12

Sử dụng geom_blank Tôi muốn thêm một số mức nhân tố mới, nhưng tôi dường như không thể làm được điều này giữ NA mứcgeom_blank giảm NA

library('ggplot2') 
pl <- ggplot(data.frame(x = factor(c(1:2, NA)), y = 1), aes(x, y)) + geom_point() 
pl 

enter image description here

pl + geom_blank(data = data.frame(x = addNA(factor(c(0:3, NA))), y = 1)) 

enter image description here

Tôi muốn có x ở 0,1,2,3, NA bằng cách sử dụng geom_blank

+1

Tôi đoán tôi có thể chuyển đổi thứ tự: 'ggplot (data.frame (x = yếu tố (c (1: 2, NA)), y = 1), aes (x, y)) + geom_blank (dữ liệu = data.frame (x = addNA (yếu tố (c (0: 3, NA))), y = 1)) + geom_point() 'không lý tưởng mặc dù - sau đó tôi có thể hỏi làm thế nào để sắp xếp lại các lớp của đối tượng ggplot đã được tạo (hoặc chèn một lớp tại một số chỉ mục) – rawr

+0

nơi mà mèo điên @baptiste tại – rawr

+0

Nó hoạt động nếu tôi bọc 'x' trong' paste() ':' pl <- ggplot (dữ liệu .frame (x = paste (hệ số (c (1: 2, NA))), y = 1), aes (x, y)) + geom_point(); pl + geom_blank (dữ liệu = data.frame (x = dán (addNA (hệ số (c (0: 3, NA)))), y = 1), aes (x, y)) '. – jav

Trả lời

9

Như tôi đã hy vọng trong các nhận xét, một công việc xung quanh có thể sắp xếp lại các lớp nếu cốt truyện đã được tạo ra và điều này sẽ làm việc cho các ggplots nói chung.

library('ggplot2') 
pl <- ggplot(data.frame(x = factor(c(1:2, NA)), y = 1), aes(x, y)) + 
    geom_point() + 
    geom_blank(data = data.frame(x = addNA(factor(c(0:3, NA))), y = 1)) 


## not what I want 
pl 


## this is what I want 
pl$layers <- rev(pl$layers) 
pl 

enter image description here

+0

Điều gì xảy ra với điểm của bạn nếu bạn tự trả lời tiền thưởng như thế này? jw –

+0

Theo [this] (http://meta.stackexchange.com/questions/16065/how-does-the-bounty-system-work) Tôi sẽ mất các điểm – rawr

+0

Vâng, điều đó thật tệ. –

1

Thật không may, khi bạn có nhiều lớp với bộ dữ liệu riêng biệt, nồng độ yếu tố có thể được điều sai lầm ghi đè. Bạn có thể khắc phục điều này bằng cách đặt các giới hạn trên thang đo rời rạc:

pl <- ggplot(data.frame(x = factor(c(1:2, NA)), y = 1), aes(x, y)) + geom_point()  
pl + 
    geom_blank(data = data.frame(x = addNA(factor(c(0:3, NA))), y = 1)) + 
    scale_x_discrete(limits=addNA(factor(c(0:3, NA)))) 

Vì lý do nào đó, điều này làm hỏng việc mở rộng trục và ngắt NA ở cạnh phải.

[Almost Working[1]

Điều này có thể được sửa chữa bằng cách tự thiết lập các thông số mở rộng theo ý thích của bạn.

pl <- ggplot(data.frame(x = factor(c(1:2, NA)), y = 1), aes(x, y)) + geom_point() 
pl + 
    geom_blank(data = data.frame(x = addNA(factor(c(0:3, NA))), y = 1)) + 
    scale_x_discrete(limits=addNA(factor(c(0:3, NA))), expand=c(0.25,0.25)) 

Working, but must manually specify expand

+0

đó là messier, cộng với nếu pl có scale_x_discrete đã có, điều này sẽ ghi đè lên đó. Tôi không thấy lý do tại sao geom_blank nên thả NA đặc biệt là nếu tôi có nó đã có và mặc định là _not_ để thả NA (ví dụ, geom_point) – rawr

+0

Ví dụ 'ggplot (data.frame (x = factor (c (1: 2 , NA)), y = 1), aes (x, y)) + geom_blank (dữ liệu = data.frame (x = addNA (yếu tố (c (0: 3, NA))), y = 1)) 'hoạt động như mong muốn (ngoại trừ không có điểm), thêm lớp điểm giữa giọt NA, thêm sau khi giữ chúng. điều đó có lạ không? – rawr

+0

Bất kỳ giải pháp nào ở đây đều lộn xộn vì đây là lỗi/giới hạn của ggplot2. Nó không hoạt động nhất quán khi hợp nhất các tập dữ liệu từ nhiều lớp. Tôi nghĩ rằng cách của tôi là sạch hơn, như thiết lập quy mô tài sản là cách dự định của những điều này bằng tay trên tất cả các lớp, trong khi đảo ngược lớp là tối nghĩa và một cái gì đó chỉ xảy ra để làm việc trong trường hợp này. Tuy nhiên, như mọi khi, giải pháp của bạn có thể thay đổi ... – jrdnmdhl

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