33

このコードで:

library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p + geom_point() + geom_text(aes(wt, mpg, label=row.names(mtcars)))

このグラフを取得します:

ここに画像の説明を入力

上記のコードを変更して、ポイント wherewt > 4またはのみにラベルを付けmpg > 25、残りのポイントにはラベルを付けないようにするにはどうすればよいですか。

4

5 に答える 5

78

data引数を与えgeom_textます:

library(ggplot2)
mtcars$name <- row.names(mtcars)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p + geom_point() + 
  geom_text(data=subset(mtcars, wt > 4 | mpg > 25),
            aes(wt,mpg,label=name))

結果のプロット:

プロット1

PS: 私は本当にp + geom()ggplot を構築するスタイルのファンではありません。同じプロットのさまざまな変更を示すために、ハドリーが元の ggplot2 本でそれを行ったと確信していますが、人々はそれを拾い上げて実行したようです. これが私がそれを行う方法です:

  • プロットのさまざまなコンポーネントを一緒に追加するだけで、+各中間ステップを保存しないでください。
  • 本当に必要でない限り、わざわざ変数に保存しないでください。必要に応じて、ファイルに保存できますggsave()
  • プロット全体に適用されるすべての美学を最初のggplot呼び出しに入れ、必要に応じて他のもののみを変更します

私のバージョン:

ggplot(mtcars, aes(wt, mpg, label=name)) +
  geom_point() +
  geom_text(data=subset(mtcars, wt > 4 | mpg > 25))
于 2013-02-22T01:29:53.753 に答える
6

subsetレイヤーに引数を渡すことができます。あなたの場合、行名を列として持つ必要があるため、適切に評価されます。構文を簡単にするplyr関数を取得するには、明示的にロードする必要があります。.

# shamelessly using @marius initial code
library(ggplot2)
library(plyr)
mtcars$name <- row.names(mtcars)
p <- ggplot(mtcars, aes(wt, mpg))

p + geom_point() + geom_text(aes(wt,mpg,label=name), subset = .(wt > 4 | mpg > 25))
于 2013-02-22T01:32:22.843 に答える
3

追加の変数を取得できます。

carnames <- row.names(mtcars)
carnames[with(mtcars, !(wt > 4 | mpg > 25))] <- ""

p + geom_point() + geom_text(aes(wt,mpg,label=carnames))
于 2013-02-22T01:36:43.597 に答える
2

ggplot2 のような格子ソリューション :-)

  library(latticeExtra)
  xyplot(mpg~wt, data=mtcars,pch=19,
         panel =function(x,y,...){
         #  panel.xyplot(x,y,...)
           data=subset(mtcars, wt > 4 | mpg > 25)
           panel.text(data$wt,data$mpg,label=row.names(data),
                      col='red',cex=2)
         },par.settings = ggplot2like(), axis = axis.grid)

ここに画像の説明を入力

于 2013-02-22T02:11:20.527 に答える