Mik*_*kko 7 plot logarithm r ggplot2
我在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)
Run Code Online (Sandbox Code Playgroud)

而这正是我所追求的:
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)
Run Code Online (Sandbox Code Playgroud)

换句话说,我必须在x轴上log10转换段的端点,但不是开头.这种行为是否有合理的解释?我理解这aes()是转换 ...但在这种情况下,x轴上的转换应该是均匀的(好吧,log10),对吗?
我正在努力:
R version 3.0.0 (2013-04-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
ggplot2_0.9.3.1
Run Code Online (Sandbox Code Playgroud)
发现这是一个错误scales()(不仅针对scale_x_log10()),当它与 一起使用annotate()并xend提供值时(它已经由 W.Chang填充为问题)。在这种情况下,xend仅在一个方向上进行变换 - 不采用 log10 值,但计算幂。
scale_x_log10()例如,如果在和"rect"中使用并提供了值,则可以正常工作。annotate()xminxmax
ggplot(dat,aes(x,y))+geom_line()+
scale_x_log10()+
annotate("rect",xmin=100,xmax=1000,ymin=log(10),ymax=log(200))
Run Code Online (Sandbox Code Playgroud)

此问题的解决方法是使用geom_segment()withdata=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)
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |