2013-05-07 27 views
5

Tôi đang sử dụng ggplot2 để tạo biểu đồ đường của một số dữ liệu được chuyển đổi nhật ký mà tất cả đều có giá trị lớn (từ 10^6 đến 10^8); vì các trục không bắt đầu ở số không, tôi không muốn chúng cắt nhau tại "gốc".cách ngăn các trục giao nhau trong ggplot2

Đây là những gì các trục hiện như sau:

ggplot2 plot

tôi muốn một cái gì đó giống như một nhận được từ đồ họa cơ bản (nhưng tôi đang sử dụng bổ sung geom_ribbon và những thứ khác lạ mắt tôi thực sự như thế nào trong ggplot2 , vì vậy tôi muốn tìm một giải pháp ggplot2):

non-intersecting axes

đây là những gì tôi đang làm hiện nay:

mydata <- data.frame(Day = rep(1:8, 3), 
    Treatment = rep(c("A", "B", "C"), each=8), 
    Value = c(7.415929, 7.200486, 7.040555, 7.096490, 7.056413, 7.143981, 7.429724, 7.332760, 7.643673, 7.303994, 7.343151, 6.923636, 6.923478, 7.249170, 7.513370, 7.438630, 7.209895, 7.000063, 7.160154, 6.677734, 7.026307, 6.830495, 6.863329, 7.319219)) 

ggplot(mydata, aes(x=Day, y=Value, group=Treatment)) 
    + theme_classic() 
    + geom_line(aes(color = Treatment), size=1) 
    + scale_y_continuous(labels = math_format(10^.x)) 
    + coord_cartesian(ylim = c(6.4, 7.75), xlim=c(0.5, 8)) 

plot(mydata$Day, mydata$Value, frame.plot = F) #non-intersecting axes 
+0

Vì vậy, bạn muốn một cái gì đó giống như cốt truyện đáy? Bạn có thể thử 'geom_point' hoặc' qplot'? – Harpal

Trả lời

3

Giải pháp cho vấn đề này là xóa đường trục bằng theme(axis.line=element_blank()) rồi thêm các đường trục giả với geom_segment() - một cho trục x và thứ hai cho trục y. Giá trị x, y, xendyend được xác định từ cốt truyện của bạn (được lấy làm giá trị nhỏ nhất và lớn nhất được hiển thị trên ô cho mỗi trục tương ứng) và giới hạn trục được sử dụng trong coord_cartesian() (giá trị tối thiểu của giới hạn để đảm bảo phân đoạn đó được vẽ thay cho trục).

ggplot(mydata, aes(x=Day, y=Value, group=Treatment)) +theme_classic() + 
geom_line(aes(color = Treatment), size=1) + 
scale_y_continuous(labels = math_format(10^.x))+ 
coord_cartesian(ylim = c(6.4, 7.75), xlim=c(0.5, 8))+ 
theme(axis.line=element_blank())+ 
geom_segment(x=2,xend=8,y=6.4,yend=6.4)+ 
geom_segment(x=0.5,xend=0.5,y=6.5,yend=7.75) 

enter image description here

+0

Hoàn hảo, cảm ơn bạn! – phosphorelated

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