Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 转换不需要';t变换ggplot2中的线段_R_Ggplot2 - Fatal编程技术网

R 转换不需要';t变换ggplot2中的线段

R 转换不需要';t变换ggplot2中的线段,r,ggplot2,R,Ggplot2,我试图用一些线段注释一个图。x轴最好通过对数变换显示。我使用的是处理变换的ggplot2,这也意味着我不必变换到线段的位置。但是当我应用变换时,线段消失了(因为变换,它们不再“适合”绘图窗口)。有没有关于如何让他们“跟随”转型的建议 最简单的例子: library(ggplot2) ## Base plot: B <- ggplot(data = data.frame(X = 10^(1:10), Y = 1:10), aes(x = X, y = Y)) + ge

我试图用一些线段注释一个图。x轴最好通过对数变换显示。我使用的是处理变换的
ggplot2
,这也意味着我不必变换到线段的位置。但是当我应用变换时,线段消失了(因为变换,它们不再“适合”绘图窗口)。有没有关于如何让他们“跟随”转型的建议

最简单的例子:

library(ggplot2)
## Base plot:
B <- ggplot(data = data.frame(X = 10^(1:10), Y = 1:10),
            aes(x = X, y = Y)) + geom_point()
## Generate segments: 
S1 <- geom_segment(x = 1000, xend = 1000,
                   y = 3, yend = 5)
S2 <- geom_segment(x = 20, xend = 2.5e9,
                   y = 8, yend = 7)
## Generate transformation:
T <- scale_x_continuous(trans = "log")
我知道我可以只变换线段的位置,但我真的更愿意找到一个更具
ggplot2
风格的解决方案

黑客解决方案:

S3 <- geom_segment(x = log(1000), xend = log(1000),
                   y = 3, yend = 5)
S4 <- geom_segment(x = log(20), xend = log(2.5e9),
                   y = 8, yend = 7)
B + S1 + S2
B + S3 + S4 + T #Fine, but not elegant.

S3不确定我显示的图是否符合您的预期。但如果是,下面的解释是有效的

ggplot2
中,对
美学
执行变换。在绘图之前,首先对数据进行转换(或者对转换后的数据进行任何类型的拟合,例如:geom_smooth等)

因此,如果您希望日志转换反映在您的段上,那么您必须使用
aes
将其概括为:

S1 <- geom_segment(aes(x=1000, xend=1000, y=3, yend=5))
S2 <- geom_segment(aes(x=20, xend=2.5e9, y=8, yend=7))

看到美学得到相应的改变。

谢谢,非常有帮助!关于
log10
,我只是想尽量减少我的最小示例,但我做得太过分了。
S1 <- geom_segment(aes(x=1000, xend=1000, y=3, yend=5))
S2 <- geom_segment(aes(x=20, xend=2.5e9, y=8, yend=7))
T <- scale_x_continuous(trans = "log10")
ggplot_build(B+S1+S2)$data # and 
ggplot_build(B+S1+S2+T)$data