7

log10 スケールでセグメントに注釈を付けようとしているときに、ggplot でかなり紛らわしい機能を見つけました。次のコードは、以下のプロットを生成します。

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)

ここに画像の説明を入力

これは私が求めているものです:

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)

ここに画像の説明を入力

つまり、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 
4

1 に答える 1

1

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))

ここに画像の説明を入力

この問題の回避策は、および 内に置かれた他のすべての値を使用geom_segment()することです。data=NULLaes()

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)

ここに画像の説明を入力

于 2013-04-25T10:43:06.500 に答える