小编Joã*_*sce的帖子

R,ggplot - 共享相同y轴但具有不同x轴刻度的图形

上下文

我有一些数据集/变量,我想绘制它们,但我想以紧凑的方式做到这一点.要做到这一点,我希望它们共享相同的y轴但不同的x轴,并且由于不同的分布,我希望其中一个x轴是对数缩放而另一个是线性缩放.

假设我有一个长尾变量(我想在绘制时对x轴进行对数缩放):

library(PtProcess)
library(ggplot2)

set.seed(1)
lambda <- 1.5
a <- 1
pareto <- rpareto(1000,lambda=lambda,a=a)
x_pareto <- seq(from=min(pareto),to=max(pareto),length=1000)
y_pareto <- 1-ppareto(x_pareto,lambda,a)
df1 <- data.frame(x=x_pareto,cdf=y_pareto)

ggplot(df1,aes(x=x,y=cdf)) + geom_line() + scale_x_log10()
Run Code Online (Sandbox Code Playgroud)

长尾巴

和一个正常的变量:

set.seed(1)
mean <- 3
norm <- rnorm(1000,mean=mean)
x_norm <- seq(from=min(norm),to=max(norm),length=1000)
y_norm <- pnorm(x_norm,mean=mean)
df2 <- data.frame(x=x_norm,cdf=y_norm)

ggplot(df2,aes(x=x,y=cdf)) + geom_line()
Run Code Online (Sandbox Code Playgroud)

正常

我想使用相同的y轴并排绘制它们.

尝试#1

我可以使用facet看起来很棒,但是我不知道如何使每个x轴具有不同的比例(scale_x_log10()使它们都按比例缩放):

df1 <- cbind(df1,"pareto")
colnames(df1)[3] <- 'var'
df2 <- cbind(df2,"norm")
colnames(df2)[3] <- 'var'
df <- rbind(df1,df2)

ggplot(df,aes(x=x,y=cdf)) + geom_line() + 
       facet_wrap(~var,scales="free_x") + scale_x_log10()
Run Code Online (Sandbox Code Playgroud)

方面尝试

尝试#2

使用grid.arrange …

r ggplot2

18
推荐指数
2
解决办法
1万
查看次数

标签 统计

ggplot2 ×1

r ×1