4

グラフィックスのグローバルを定義したいかもしれませんが、一部のレイヤーではそれらを除外しaes()ます。ggplot()たとえば、次の例を想定します。

foo <- data.frame(x=runif(10),y=runif(10))
bar <- data.frame(x=c(0,1),ymin=c(-.1,.9),ymax=c(.1,1.1))
p <- ggplot(foo,aes(x=x,y=y))+geom_point()

すべてが良いです。ただし、リボンを追加しようとすると:

p <- p + geom_ribbon(data=bar, aes(x=x,ymin=ymin,ymax=ymax), alpha=.1)
# Error: Discrete value supplied to continuous scale

このエラーは、 にも適用されるyglobal の一部として既に定義されているために発生しますが、 にはそれがありません。aes()geom_ribbon()bar

このエラーを回避する 2 つの可能性を見つけました。そのうちの 1 つはy=y、元のから削除することですggplot(foo,aes(x=x,y=y))が、将来的には毎回、 に追加する必要がある何かを描画する必要がありますがy=yaes()これは良くありません。

他の可能性は、に偽のy列を追加することbarです:

bar = cbind(bar, y=0)
p <- p + geom_ribbon(data=bar, aes(x=x,ymin=ymin,ymax=ymax), alpha=.1)

ここに画像の説明を入力

今はうまくいきます。ただし、偽の変数であるため、そのように振る舞うのは好きではありません。を呼び出すときに既に定義aes()されているを一時的に無効にする方法はありますか?ggplot()geom_ribbon()

4

1 に答える 1

4

@ErnestAのコメントで述べたように、美学をNULLに設定することで、美学のマッピングを解除できます。

      aes(y=NULL,x=x,ymin=ymin,ymax=ymax)

PS:伝説のために、あなたは今、美学をオーバーライドすることができますaes.override

于 2012-12-11T15:53:26.447 に答える