我在使用以下代码时遇到了一些问题:
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搞砸了,但我不知道如何解决它。
感谢。
答案 0 :(得分: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)
另请注意,在您的代码中,您将多次设置美学,具有重复的比例,并且通常只是令人震惊的可读性。你自己修理任何东西真的很难。