ggplot2 の棒グラフとともに周波数を表示します
質問
棒グラフ内に周波数を表示しようとしています...そうですね、欲しいです どこかで グラフ内:バーの下、バー内、バーの上、または凡例領域内。そして、私はそれができることを思い出しました(間違っているかもしれません) ggplot2
. 。これはおそらく簡単な方法です...少なくともそれは簡単なようです。コードは次のとおりです。
p <- ggplot(mtcars)
p + aes(factor(cyl)) + geom_bar()
グラフに埋め込まれた周波数を取得できる可能性はありますか?
解決
geom_text
ベースのグラフィックからtext
のTHA類似体である:
p + geom_bar() + stat_bin(aes(label=..count..), vjust=0,
geom="text", position="identity")
あなたはラベルのy位置を調整したい場合は、あなたがy=
内stat_bin
の美学を使用することができます。例えば、y=..count..+1
はバーの上のラベル1つのユニットを配置します。
geom_text
とstat="bin"
内部を使用する場合は、上も機能します。
他のヒント
これを行うには、ハードな方法。私は確かに近づいています。
良くありますよggplot(mtcars,aes(factor(cyl))) +
geom_bar() +
geom_text(aes(y=sapply(cyl,function(x) 1+table(cyl)[names(table(cyl))==x]),
label=sapply(cyl,function(x) table(cyl)[names(table(cyl))==x])))
異なる情報、次の作品を追加したいときます:
ggplot(mydata, aes(x=clusterSize, y=occurence)) +
geom_bar() + geom_text(aes(x=clusterSize, y=occurence, label = mydata$otherinfo))
あるいは、利用可能なアノテーション関数のいくつかを使用すると便利であることがわかりました。 ggplot2::annotate
, ggplot2::annotation_custom
または cowplot::draw_label
(これはのラッパーです annotation_custom
).
ggplot2::annotate
geom text オプションを再利用しているだけです。キャンバス上の任意の場所にプロットする場合により有利なのは、次のような可能性です。 ggplot2::annotation_custom
または cowplot::draw_label
.
の例 ggplot2::annotate
library(ggplot2)
p <- ggplot(mtcars) + aes(factor(cyl)) + geom_bar()
# Get data from the graph
p_dt <- layer_data(p) # or ggplot_build(p)$data
p + annotate(geom = "text", label = p_dt$count, x = p_dt$x, y = 15)
あるいは許可する y
変化させる:
p + annotate(geom = "text", label = p_dt$count, x = p_dt$x, y = p_dt$y + 1)
例 ggplot2::annotation_custom
の ggplot2::annotate
最初に質問されたように、より「型破りな」場所でプロットしようとすると制限があります ("どこかで グラフで」)。しかし、 ggplot2::annotation_custom
と組み合わせて クリッピングオフの設定, 、注釈を許可します どこでも 以下の例に示すように、キャンバス/シート上で:
p2 <- p + coord_cartesian(clip = "off")
for (i in 1:nrow(p_dt)){
p2 <- p2 + annotation_custom(grid::textGrob(p_dt$count[i]),
xmin = p_dt$x[i], xmax = p_dt$x[i], ymin = -1, ymax = -1)
}
p2
例 cowplot::draw_label
cowplot::draw_label
のラッパーです ggplot2::annotation_custom
, 、そして(結果として)少し冗長ではありません。また、キャンバス上の任意の場所にプロットするには、切り取る必要があります。
library(cowplot)
#> Warning: package 'cowplot' was built under R version 3.5.2
#>
#> Attaching package: 'cowplot'
#> The following object is masked from 'package:ggplot2':
#>
#> ggsave
# Revert to default theme; see https://stackoverflow.com/a/41096936/5193830
theme_set(theme_grey())
p3 <- p + coord_cartesian(clip = "off")
for (i in 1:nrow(p_dt)){
p3 <- p3 + draw_label(label = p_dt$count[i], x = p_dt$x[i], y = -1.8)
}
p3
ご了承ください、 draw_label
と組み合わせて使用することもできます cowplot::ggdraw
, 、0 から 1 の範囲の相対座標に切り替えます (キャンバス全体を基準にして、例を参照してください) help(draw_label)
)。その場合の設定 coord_cartesian(clip = "off")
が処理するため、もう必要ありません。 ggdraw
.
2019-01-16 に作成されました。 リプレックスパッケージ (v0.2.1)
あなたがggplot2に制限されていない場合は、あなたが使用できる?plotrixパッケージからベースのグラフィックスや?boxed.labelsからテキストます。