2013-08-14 37 views
5

Có thể chồng nhiều ô stat_contour từ ggplot2 bằng dữ liệu từ các khung dữ liệu khác nhau không?Làm cách nào để có thể chồng nhiều ô stat_contour trên cùng một biểu đồ bằng ggplot2?

Tôi đã đọc các giải pháp để phủ các loại geom khác nhau, nhưng đối với điều này tôi đặc biệt muốn sử dụng stat_contour.

Biến X và Y giống nhau cho cả hai tập dữ liệu. Một số dữ liệu mẫu để làm việc với:

# some sample data 
require(ggplot2) 
require(reshape2) 

v1 <- melt(volcano) 
v2 <- v1 
v2$value <- v2$value*1.5 

Vì vậy, âm mưu mỗi một cá nhân hoạt động:

ggplot(v1, aes(x = Var1, y = Var2, z = value)) + 
+ stat_contour(aes(color = ..level..)) + scale_colour_gradient(low = "white", high="#ff6666") 

ggplot(v2, aes(x = Var1, y = Var2, z = value)) + 
+ stat_contour(aes(color = ..level..)) + scale_colour_gradient(low = "white", high="#A1CD3A") 

Có cách nào để che phủ những âm mưu mật độ trên cùng một đồ thị?

Tôi đã thử tạo biến yếu tố và gán mỗi giá trị khác nhau, sau đó xếp chúng, nhưng tôi gặp lỗi vì chúng có nhiều giá trị cho mỗi X và Y (Var 1 và Var2 tại đây).

Cảm ơn sự giúp đỡ của bạn!

+0

Bạn sẽ có thể thêm nhiều 'geom_contour's đến một âm mưu, nhưng bạn sẽ không thể sử dụng quy mô khác nhau, chỉ có 1 quy mô được phép cho mỗi thẩm mỹ cho mỗi lô. Vì vậy, bạn có thể phải đưa ra một giải pháp khác để phân biệt giữa hai tập dữ liệu của bạn. –

Trả lời

7

Dưới đây là một số tùy chọn để chồng hai bộ dữ liệu đường bao trong ggplot2. Một cảnh báo quan trọng (như được chú ý bởi @Drew Steen) là bạn không thể có hai thang đo colour riêng biệt trong cùng một ô.

# Add category column to data.frames, then combine. 
v1$category = "A" 
v2$category = "B" 
v3 = rbind(v1, v2) 

p1 = ggplot(v3, aes(x=Var1, y=Var2, z=value, colour=category)) + 
    stat_contour(binwidth=10) + 
    theme(panel.background=element_rect(fill="grey90")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 1") 

p2 = ggplot(v3, aes(x=Var1, y=Var2, z=value, colour=category)) + 
    stat_contour(aes(alpha=..level..), binwidth=10) + 
    theme(panel.background=element_rect(fill="white")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 2") 

p3 = ggplot(v3, aes(x=Var1, y=Var2, z=value, group=category)) + 
    stat_contour(aes(color=..level..), binwidth=10) + 
    scale_colour_gradient(low="white", high="#A1CD3A") + 
    theme(panel.background=element_rect(fill="grey50")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 3") 

p4 = ggplot(v3, aes(x=Var1, y=Var2, z=value, linetype=category)) + 
    stat_contour(aes(color=..level..), binwidth=10) + 
    scale_colour_gradient(low="white", high="#A1CD3A") + 
    theme(panel.background=element_rect(fill="grey50")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 4") 

library(gridExtra) 
ggsave(filename="plots.png", height=8, width=10, 
     plot=arrangeGrob(p1, p2, p3, p4, nrow=2, ncol=2)) 
  • Lô 1: Lô hai lớp trong màu sắc rắn khác nhau với aes(colour=category)
  • Lô 2: Hiện ..level.. sử dụng alpha minh bạch. Bắt chước có hai gradient màu riêng biệt.
  • Lô 3: Vẽ cả hai lớp với cùng một độ dốc. Giữ các lớp riêng biệt với aes(group=category)
  • Lô 4: Sử dụng gradient màu đơn, nhưng phân biệt các lớp với linetype.

enter image description here

+0

Cảm ơn bạn. Điều này có vẻ như giải pháp gần nhất có thể cho hình ảnh tôi tưởng tượng. Cảm ơn bạn đã giới thiệu gói 'gridExtra', tôi sẽ kiểm tra nó. –

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