gpt4 book ai didi

r - log10 尺度上的段注释对于段的结尾和开头的工作方式不同吗?

转载 作者:行者123 更新时间:2023-12-04 12:54:58 25 4
gpt4 key购买 nike

我在 ggplot 中发现了一个相当令人困惑的功能,同时试图在 log10 尺度上注释段。以下代码生成以下图:

library(ggplot2)
dat <- data.frame(x = x <- 1:1000, y = log(x))
ggplot(dat, aes(x = x, y = y)) +
geom_line(size = 2) + scale_x_log10() +
annotate("segment", x = 0, xend = log10(100), y = log(100), yend = log(100), linetype = 2) +
annotate("segment", x = log10(100), xend = log10(100), y = 0, yend = log(100), linetype = 2)

enter image description here

而这正是我所追求的:
ggplot(dat, aes(x = x, y = y)) +
geom_line(size = 2) + scale_x_log10() +
annotate("segment", x = 0, xend = log10(100), y = log(100), yend = log(100), linetype = 2) +
annotate("segment", x = 100, xend = log10(100), y = 0, yend = log(100), linetype = 2)

enter image description here

换句话说,我必须对 x 轴上的段的端点进行 log10 变换,而不是开始。这种行为有合乎逻辑的解释吗?我明白 aes() does the transformations ...但在这种情况下,x 轴上的变换应该是均匀的(好吧,log10),对吗?

我正在处理:
R version 3.0.0 (2013-04-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
ggplot2_0.9.3.1

最佳答案

发现这是scales()的一个bug (不仅用于 scale_x_log10() )当它与 annotate() 一起使用时和 xend提供了值(它是 already filled 作为 W.Chang 的问题)。在这种情况下转换 xend仅在一个方向上完成 - 不采用 log10 值但计算功率。
scale_x_log10()例如,如果 "rect" 可以正常工作用于 annotate()xmin , xmax值提供。

ggplot(dat,aes(x,y))+geom_line()+
scale_x_log10()+
annotate("rect",xmin=100,xmax=1000,ymin=log(10),ymax=log(200))

enter image description here

此问题的解决方法是使用 geom_segment()data=NULL以及放在 aes() 中的所有其他值.
ggplot(dat, aes(x = x, y = y)) +
geom_line(size = 2) + scale_x_log10() +
geom_segment(data=NULL,aes(x = 100, xend = 100, y = 0, yend = log(100)),
linetype = 2)

enter image description here

关于r - log10 尺度上的段注释对于段的结尾和开头的工作方式不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16211572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com