ggplot上的混合比例

Dav*_*idR 2 plot r ggplot2

我想制作一个图(最好用ggplot2),其中x轴有不同的比例.更确切地说,我希望我的比例从大约0.001到0.05为对数,非对数从0.05到1.0

我目前的情节代码是:

ggplot(DF, aes(x=DF$RAW.PVAL, col=DF$sample))+stat_ecdf()+geom_abline()+xlim(0,1)+ylim(0,1)+xlab("P Value")+ylab("Frequecy")+ggtitle("Type I error control")+labs(colour="Sample")
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到结果:

Type1ErrorControl

无论如何我能做到这一点吗?我想,我可以定义一个新的转换,但我没有找到关于如何做到这一点的任何说明.

谢谢你的期待!

eip*_*i10 5

由于尺度失真,该图可能会产生误导,但是......您可以为两个x范围绘制单独的面板,一个具有对数缩放,另一个具有线性缩放,然后将它们组合在一起.我们将更改绘图边距以控制绘图之间的空间量并获得适当的重叠.

library(ggplot2)
library(scales)
library(grid)
library(gridExtra)

# Fake data
test <- data.frame(x=c(seq(1,100, length.out=20), 101:110), y=1:30)
Run Code Online (Sandbox Code Playgroud)

左图(x <= 100):

p1 = ggplot(test[test$x<=100,], aes(x=x,y=y)) + 
  geom_point(size=2) +
  scale_x_log10(limits=c(1,100), breaks=c(1,5,10, seq(20,100,20))) +
  coord_cartesian(xlim=c(0.8,105), ylim=c(0,32), expand=FALSE) +
  scale_y_continuous(limits=c(0,30)) +
  theme(plot.margin=unit(c(0,-0.2,0,0),"lines")) +
  labs(x="")
Run Code Online (Sandbox Code Playgroud)

右图(x> = 100):

p2 = ggplot(test[test$x>=100,], aes(x=x,y=y)) + 
  geom_point(size=2) +
  scale_x_continuous(limits=c(100,110), breaks=seq(100,110,2)) +
  coord_cartesian(xlim=c(100,111), ylim=c(0,32), expand=FALSE) +
  theme(plot.margin=unit(c(0,0,0,-0.2), "lines"),
        axis.title.y=element_blank(),
        axis.ticks.y=element_blank(),
        axis.text.y=element_blank()) +
  labs(y="", x="")

grid.arrange(arrangeGrob(p1, p2, widths=c(0.7,0.3), ncol=2),
             textGrob("x-label"), ncol=1, heights=c(0.95,0.05))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述