16

私はgeom_point自分のデータの数を説明するために使用しようとしています。また、グラフ内のいくつかのポイントに。で注釈を付けたいと思いますgeom_text。に呼び出しを追加するとgeom_text、凡例のポイントの下に何かがプロットされているように見えます。レイヤーの順序を逆にして無駄にしようとしました。なぜそうなっているのか頭を悩ませることはできません。誰かがこれを見たことがありますか?

set.seed(42)
df <- data.frame(x = 1:10
    , y = 1:10
    , label = sample(LETTERS,10, replace = TRUE)
    , count = sample(1:300, 10, replace = FALSE)
)

p <- ggplot(data = df, aes(x = x, y = y, size = count)) + geom_point()
p + geom_text(aes(label = label, size = 150, vjust = 2))

代替テキスト

4

2 に答える 2

25

これはいつも私に起こりました。aes()秘訣は、データを美学にマッピングすることを知ることです。マップするデータがない場合(たとえば、決定する単一の値がある場合)、を使用する理由はありませんaes()aes()あなたの伝説には、中にあるものだけが現れると私は信じています。

さらに、の内部でマッピングを指定すると、それらのマッピングは後続のすべてのレイヤーggplot(aes())に適用されます。それはあなたのxとyにとって良いことです、なぜなら両方ともそれらを使うからです。それはポイントにのみ適用されるので、それは悪いことです。geom_pointgeom_textsize = count

したがって、これらはこの種のことを防ぐための私の2つのルールです。

  1. データベースのマッピングのみを。内に配置しaes()ます。引数が単一の事前に決定された値をとっている場合は、それを。の外側のレイヤーに渡しaes()ます。
  2. データを使用するレイヤーのデータのみをマップします。ggplot(aes())当然の結果:後続のすべてのレイヤーでデータが使用されると確信できる場合にのみ、内部のデータをマップします。それ以外の場合は、レイヤーレベルでマップします。

だから私はこれをこのようにプロットします:

p <- ggplot(data = df, aes(x = x, y = y)) + geom_point(aes(size = count)) 
p + geom_text(aes(label = label), size = 4, vjust = 2) 
于 2010-11-19T01:07:36.533 に答える
19

または、aes内のテキストのサイズを指定する必要がある場合、legend = FALSEは、geomの凡例の描画を抑制します。

p <- ggplot(data = df, aes(x = x, y = y, size = count)) + geom_point()
p + geom_text(aes(label = label, size = 150, vjust = 2), show_guide = FALSE)
于 2010-11-19T01:15:55.380 に答える