我想制作一个图(最好用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)
在这里你可以看到结果:
无论如何我能做到这一点吗?我想,我可以定义一个新的转换,但我没有找到关于如何做到这一点的任何说明.
谢谢你的期待!
由于尺度失真,该图可能会产生误导,但是......您可以为两个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)
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |