2

このデータの使用:

library(ggplot2)
dd <- data.frame(id = c("A", "A", "B", "B"), prepost = c("pre", "post"), 
         value = 1:4)

これは機能します:

qplot(id, value, data = dd, fill = prepost, geom = "bar")

ただし、次のメッセージには、示されたエラーメッセージが表示されます。2つの違いはgroup = prepost、コマンドの最後にを追加することだけです。ただし、すでに書いfill = prepostているので、とにかくそれがデフォルトのグループになるはずです。

> qplot(id, value, data = dd, fill = prepost, geom = "bar", group = prepost)
 Error in pmin(y, 0) : object 'y' not found

stat = "identity"次のように追加することで、最後のものを修正できます。

qplot(id, value, data = dd, fill = prepost, geom = "bar", group = prepost, 
      stat = "identity")

2つの質問があります:

(a)他の人が機能しているのに、なぜqplotエラーメッセージを表示したものが機能しないのですか?

(b)継続的yな美学を使用する場合geom_bar、指定しないとどうなるstatでしょうか?最初から、qplotその場合はあたかもそれが動作するように見えますが、指定するかどうかstat="identity"の存在下で違いが明らかになります。groupstat="identity"

(ちなみに、この質問は多少関連しているようですが、この質問に答えていないようです:ggplot2、geom_bar、position = "dodge"の問題:stackedには正しいy値がありますが、dodgedにはありません

4

1 に答える 1

1

良い質問です!

@joranによる以前のコメントをエコーし​​ます

私は一般的に、qplotの使用をやめることを学ぶと、人々はggplotとあまり混乱しないことがわかります。

呼び出しqplotは、を使用して再作成できます

ggplot(dd) + geom_bar(aes(x = id, y = value, fill = prepost))

さて、あなたがgeom_barそれが理解する美学をリストしているためのヘルプを読んだ場合group、それらの1つではありません(したがって、これを行うときにあなたが望むようにそれが機能することを期待できないかもしれません)

ヘルプを読むgroupと、すべての離散変数のデフォルトの相互作用をオーバーライドできる美学であることがわかります。

単独でグループ化する場合、デフォルトで含まれるprepost離散x軸変数でグループ化することはありません。id

したがって

ggplot(dd) + 
 geom_bar(aes(x=id, y = value, fill = prepost, group = interaction(id, prepost)))

動作しますが、これがデフォルトであるため、グループ化は完全に冗長です。

ちょうどprepostまたはidグループとして指定すると、混乱しますstat_bin(棒グラフの値を作成するために数値を計算する基本的な方法。したがって、stat_identity代わりに使用する必要があります。


編集:以下のコメントでOPが指摘しているように、これは既知の問題に関連しており、次のバージョン(またはgithubの現在の開発バージョン)でより適切な警告が表示されます

ニュースから

  • stat_bin設定またはマップされたy値で使用されたときに警告メッセージを生成するようになりました。以前は、stat_biny値を使用および設定/マップすることが可能でした。グループごとに1つのy値がある場合、各グループのケース数ではなく、データからのy値が表示されます。この使用法は非推奨であり、ggplot2の将来のバージョンで削除される予定です。(Winston Chang。修正#632)
于 2012-11-14T02:13:07.363 に答える