R语言 用不同的x轴和y轴叠加两个图

2skhul33  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(108)

我有一个主要的情节,只有当一个人意识到底层数据生成过程时才能理解,这再次通过情节得到了最好的说明。因此,我想把这两个情节放在一起。问题是,这两个图使用完全不同的尺度。这是我在一个最小的可复制示例中所走的路:

library(tidyverse)

df <- data.frame(x=c("borrowing", "ignorant", "borrowing", "ignorant"), y=c(0.9, 0.5, 0.2, 0.8), z=c("same", "same", "diff", "diff"))
myfun <- function(a,b,x){a + x*b}

ggplot() +
  geom_point(data=df, aes(x=x,y=y))+
  geom_function(data = data.frame(z="diff"), fun=myfun, args=list(a=0, b=2)) +
  geom_function(data = data.frame(z="same"), fun=myfun, args=list(a=0, b=1)) + 
  facet_grid(~z)

这一切都很好,除了geom_function(连续)使用与geom_point(离散)相同的比例。理想情况下,我想用离散的x轴绘制点几何(类别为“借用”和“无知”),用连续的x轴绘制函数几何(x值从0到20,而不是像现在这样从1到2)。有没有可能基于ggplot实现这一点?当然,我是开放的包,如gridExtra等。

sg3maiej

sg3maiej1#

您可以尝试将facet_wrapscales = "free_y"参数一起使用。只需将facet_grid行更改为以下内容:

facet_wrap(~z, scales = "free_y")

pkwftd7m

pkwftd7m2#

在将离散x变量转换为连续变量后复制轴可以做到这一点,然后在sex_axis参数中重新缩放第二个轴,遵循这篇文章的建议:Duplicating (and modifying) discrete axis in ggplot2

ggplot() +
  geom_point(data=df, aes(x=as.numeric(as.factor(x))-1,y=y)) +
  geom_line(data = data.frame(z="diff", tox=myfun(a=-1, b=2, x=0:20), x=0:20), aes(x=x/20, y=tox/100)) +
  geom_line(data = data.frame(z="same", tox=myfun(a=-4, b=1, x=0:20), x=0:20), aes(x=x/20, y=tox/100)) +
  facet_grid(~z) + scale_x_continuous(sec.axis = sec_axis(trans=~.x*20, name="Dose")) + 
  scale_y_continuous(limits=c(0,1), "Accuracy", sec.axis=sec_axis(~.x*100, name="Prob. of Tox."))

相关问题