2011-12-10 37 views
6

Tôi muốn tính hai dòng khác nhau phù hợp nhất cho 2 phần cốt truyện của tôi. Tôi có thể tập hợp dữ liệu, nhưng đã tự hỏi liệu có thể xác định phạm vi mà stat_smooth sẽ hoạt động hay không. Ví dụ:Ràng buộc stat_smooth đến một phạm vi cụ thể

Ví dụ: tôi muốn khớp hai dòng riêng biệt với dữ liệu này, một cho lat < 100 và một cho lat> 100.

test<-data.frame(ecdf=c(0.02040816,0.04081633,0.06122449,0.08163265,0.10204082,0.14285714,0.14285714,0.16326531,0.24489796,0.24489796,0.24489796,0.24489796,0.26530612,0.28571429,0.30612245,0.32653061,0.36734694,0.36734694,0.38775510,0.40816327,0.42857143,0.46938776,0.46938776,0.48979592,0.53061224,0.53061224,0.59183673,0.59183673,0.59183673,0.61224490,0.63265306,0.65306122,0.67346939,0.69387755,0.71428571,0.73469388,0.75510204,0.77551020,0.79591837,0.81632653,0.83673469,0.85714286,0.87755102,0.89795918,0.91836735,0.93877551,0.95918367,0.97959184,0.99900000),lat=c(50.7812,66.4062,70.3125,97.6562,101.5620,105.4690,105.4690,109.3750,113.2810,113.2810,113.2810,113.2810,125.0000,136.7190,148.4380,164.0620,167.9690,167.9690,171.8750,175.7810,183.5940,187.5000,187.5000,191.4060,195.3120,195.3120,234.3750,234.3750,234.3750,238.2810,261.7190,312.5000,316.4060,324.2190,417.9690,507.8120,511.7190,562.5000,664.0620,683.5940,957.0310,1023.4400,1050.7800,1070.3100,1109.3800,1484.3800,1574.2200,1593.7500,1750.0000)) 

p <- ggplot(test, aes(lat, ecdf)) 
p+geom_point()+scale_y_probit()+scale_x_log10()+ stat_smooth(method = "lm") 

plot

+0

Tôi tin rằng cách duy nhất để làm điều đó là để tạo ra một biến nhóm riêng biệt và sau đó chuyển nó sang 'aes' trong' stat_smooth'. – joran

Trả lời

10

Bạn luôn có thể làm một cái gì đó như thế này:

p + geom_point() + scale_y_probit() + scale_x_log10() + 
geom_smooth(data=subset(test, lat>100), method = "lm") + 
geom_smooth(data=subset(test, lat<=100), method = "lm") 

Nhưng nó có thể thích hợp hơn để lần đầu tiên xác định một yếu tố (ở đây latcat) đánh dấu hai nhóm điểm bạn muốn riêng biệt trơn tru. Sau đó, bao gồm các yếu tố trong thẩm mỹ của bạn, và geom_smooth() sẽ làm phần còn lại của công việc cho bạn:

test$latcat <- cut(test$lat, 
        breaks = c(-Inf, 100, Inf), 
        labels = c("<=100", ">100")) 

p <- ggplot(test, aes(lat, ecdf, colour = latcat)) 
p + geom_point() + scale_y_probit() + scale_x_log10() + 
geom_smooth(method = "lm") 

enter image description here

+0

Cảm ơn Josh, đó là hoàn hảo! – FGiorlando

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