質問

棒グラフ内に周波数を表示しようとしています...そうですね、欲しいです どこかで グラフ内:バーの下、バー内、バーの上、または凡例領域内。そして、私はそれができることを思い出しました(間違っているかもしれません) 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_textstat="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からテキストます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top