2017-04-17 81 views
0

林有一些問題用下面的代碼:GGPLOT2 coord_trans保持縮放相同

p3<-ggplot(data.frame(x=c(-10, 30),y=c(0,250)), aes(x)) 
p3<-p3+geom_abline(intercept = 44, slope = 0,lty=2) 
p3<-p3+coord_cartesian(ylim=c(0,200)) 
p3<-p3 +stat_function(fun=function(x)12+(160)/(1+exp(-.759*(x-7.69))),color="yellow2",aes(group=factor(c(0,cumsum(diff(..y.. >= 44) != 0))), linetype=factor(c(0,cumsum(diff(..y.. >= 44) != 0)))),size=1.5) + 
    scale_linetype_manual(values=c(1,3))+scale_x_continuous(limits=c(-5,25))+ 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),axis.ticks.y=element_blank(), axis.ticks.x=element_blank(),axis.text.x=element_blank(),axis.text.y=element_blank() ,plot.title = element_text(hjust = 0.5),legend.position = "none") +xlab('') +ylab("") 

p3<-p3+stat_function(fun=function(x)9+(160)/(1+exp(-.759*(x-7.69))),size = 2,color="yellow",aes(group=factor(c(0,cumsum(diff(..y.. >= 44) != 0))), linetype=factor(c(0,cumsum(diff(..y.. >= 44) != 0)))),size=1.5)+scale_linetype_manual(values=c(1,3)) 
p3<-p3+coord_trans(y = "log") 


p4<-ggplot(data.frame(x=c(-10, 30),y=c(0,250)), aes(x)) 
p4<-p4+geom_abline(intercept = 44, slope = 0,lty=2) 
p4<-p4+coord_cartesian(ylim=c(0,200)) 
p4<-p4 +stat_function(fun=function(x)12+(160)/(1+exp(-.759*(x-7.69))),color="coral4",aes(group=factor(c(0,cumsum(diff(..y.. >= 44) != 0))), linetype=factor(c(0,cumsum(diff(..y.. >= 44) != 0)))),size=1.5) + 
    scale_linetype_manual(values=c(1,3))+scale_x_continuous(limits=c(-5,25))+ 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),axis.ticks.y=element_blank(), axis.ticks.x=element_blank(),axis.text.x=element_blank(),axis.text.y=element_blank() ,plot.title = element_text(hjust = 0.5),legend.position = "none") +xlab('') +ylab("") 


p4<-p4+stat_function(fun=function(x)12+(180)/(1+exp(-.759*(x-7.69))),size = 2,color="coral2",aes(group=factor(c(0,cumsum(diff(..y.. >= 44) != 0))), linetype=factor(c(0,cumsum(diff(..y.. >= 44) != 0)))),size=1.5) + scale_linetype_manual(values=c(1,3)) 

p4<-p4+coord_trans(y = "log") 

也就是說,當我的情節P3和P4,我似乎無法得到鱗去排隊,這樣的點水平線在兩個地塊中處於相同的水平。我究竟做錯了什麼?看來,其中一個stat_functions正在搞亂,但我不知道如何解決它。

enter image description here

感謝。

+0

您能否讓您的代碼易讀? – Axeman

回答

2

每個小區只能有一個座標系。

因此,當您第一次添加coord_cartesian(ylim=c(0,200)),然後coord_trans(....)時,您設置的y限制會丟失。

第二個問題是您無法將對數刻度的限制設置爲零,因爲零對象不會以對數刻度表示。讓我們用8代替,因爲這似乎在這裏很好地工作。

p1 <- ggplot(data.frame(x=c(-10, 30),y=c(0,250)), aes(x)) + 
    geom_abline(intercept = 44, slope = 0,lty=2) + 
    stat_function(fun = function(x) 12 + (160)/(1 + exp(-.759 * (x-7.69))),color="yellow2", 
       aes(group=factor(c(0,cumsum(diff(..y.. >= 44) != 0))), 
        linetype=factor(c(0,cumsum(diff(..y.. >= 44) != 0)))), 
       size=1.5) + 
    stat_function(fun=function(x)9+(160)/(1+exp(-.759*(x-7.69))),color="yellow", 
       aes(group=factor(c(0,cumsum(diff(..y.. >= 44) != 0))), 
        linetype=factor(c(0,cumsum(diff(..y.. >= 44) != 0)))),size=1.5) + 
    scale_x_continuous(limits=c(-5,25)) + 
    coord_trans(y = "log", limy = c(8, 200)) + 
    theme(legend.position = 'none') 


p2 <- ggplot(data.frame(x=c(-10, 30),y=c(0,250)), aes(x)) + 
    geom_abline(intercept = 44, slope = 0,lty=2)+ 
    stat_function(fun=function(x)12+(160)/(1+exp(-.759*(x-7.69))),color="coral4", 
       aes(group=factor(c(0,cumsum(diff(..y.. >= 44) != 0))), 
        linetype=factor(c(0,cumsum(diff(..y.. >= 44) != 0)))),size=1.5) + 
    scale_linetype_manual(values=c(1,3))+scale_x_continuous(limits=c(-5,25)) + 
    stat_function(fun=function(x)12+(180)/(1+exp(-.759*(x-7.69))),color="coral2", 
       aes(group=factor(c(0,cumsum(diff(..y.. >= 44) != 0))), 
        linetype=factor(c(0,cumsum(diff(..y.. >= 44) != 0)))),size=1.5) + 
    coord_trans(y = "log", limy = c(8, 200)) + 
    theme(legend.position = 'none') 


cowplot::plot_grid(p1, p2) 

enter image description here

另外請注意,在你的代碼,你設置美學多次,有重複秤,或僅僅是駭人聽聞的可讀性。你爲自己做了很難的事情。