2012-01-05 32 views
10

Tôi có một câu hỏi phức tạp về những gì tôi đang cố gắng thực hiện. Tôi có một âm mưu với hai dòng (trung bình của hai điều kiện) trên đó. Tôi muốn thêm vào cùng một ô vuông phản ánh giá trị t (và được tô màu theo các giá trị này theo cách tô chuyển tiếp). Làm thế nào tôi có thể thêm hình vuông này?ggplot2: Thêm hình vuông có màu gradient theo giá trị

Cũng vì tôi không biết nếu tôi rõ ràng, đây là một con số của những gì tôi cố gắng đạt được.

Cảm ơn bạn đã được trợ giúp!

enter image description here

+1

Bạn có thể đăng một số ví dụ tái sản xuất không? –

Trả lời

16

Hãy thử điều này cho ggplot2 cách:

x <- seq(-10, 10, 0.1) 
df <- data.frame(x, y1 = pnorm(x), y2 = pnorm(x) * 2) 
df$t <- df$y2 - df$y1 
dfm <- melt(df, id = "x") 

ggplot(NULL, aes(x, value)) + 
    geom_line(aes(colour = variable), 
      droplevels(subset(dfm, variable %in% c("y1", "y2")))) + 
    geom_rect(aes(xmin = x - 0.05, xmax = x + 0.05, ymin = -0.5, ymax = -0.4, fill = value), 
      subset(dfm, variable == "t")) 

enter image description here

CẬP NHẬT

Bạn có thể sử dụng scale_fill_XXX. Đây là phiên bản màu phản lực:

jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan","#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000")) 

# panel on the left side 
p <- ggplot(NULL, aes(x, value)) + 
    geom_line(aes(colour = variable), 
      droplevels(subset(dfm, variable %in% c("y1", "y2")))) + 
    geom_rect(aes(xmin = x - 0.05, xmax = x + 0.05, ymin = -0.5, ymax = -0.4, fill = value), 
      subset(dfm, variable == "t")) + 
    scale_fill_gradientn(colours = jet.colors(7)) 
p 

và trong phiên bản ggplot2 tiếp theo, bạn có thể sử dụng thanh màu làm chú giải.

# panel on the right side 
    p + guides(fill = "colourbar") 

enter image description here

+0

Tuyệt vời cảm ơn bạn nó hoạt động thực sự tốt! Antother câu hỏi: bạn sẽ biết làm thế nào tôi có thể thao tác các màu sắc của gradient? Cảm ơn bạn rất nhiều! – clowny

+1

@clowny Đã cập nhật. – kohske

+1

Tôi muốn đề xuất 'geom_raster' thay vì' geom_rect' – baptiste

0

Đối với đồ họa cơ bản bạn có thể sử dụng chức năng rasterImage để thêm một hình chữ nhật với các gradient trong nó vào một đồ thị.

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