2017-01-25 1 views
5

私は現在、データ科学のRを読んでいます。 Hadley Wickhamです。R:ggplot2 pointrangeの例

library(tidyverse) 

ggplot(data = diamonds) + 
stat_summary(
    mapping = aes(x = cut, y = depth), 
    fun.ymin = min, 
    fun.ymax = max, 
    fun.y = median 
) 

は今、適切なgeom_機能を使って、同じプロットを作成する方法として疑問がある:それには、以下の例があります。私はstat_summaryのデフォルトgeomを見て、それはpointrangeです。

だから私は、次のことを試してみました:

ggplot(data = diamonds) + geom_pointrange(mapping = aes(x = cut, y = depth), stat = "summary") 

しかし、私はプロット上minmaxポイントを得ることはありません。

geom_pointrangeを使用して正確なプロットを取得するにはどうすればよいですか?

+1

を、私は、その本を読んでいる、と私は正確に同じ質問を持っていました。 StackOverflowは最高です。 –

答えて

6

geom_pointrangeは、yminまたはymaxの値を自動的に計算しません。まだgeom_pointrangeを使用しているときにstat = "summary"でこれを行うことができます。

ggplot(data = diamonds) + 
    geom_pointrange(mapping = aes(x = cut, y = depth), 
        stat = "summary", 
        fun.ymin = min, 
        fun.ymax = max, 
        fun.y = median) 
+0

私が欠けていたのは、最後の3つの議論でした。 –

3

私はちょうどgeom_lineを使用していると考えることができます簡単な方法とstat_summary

ggplot(data = diamonds, mapping = aes(x = cut, y = depth)) + 
    geom_line() + 
    stat_summary(fun.y = "median", geom = "point", size = 3) 

これは非常によく似たプロットを与えます。 enter image description here

geom_pointrangeを本当に使いたい場合は、まず小さなデータセットを作成します。

data = diamonds %>% 
    group_by(cut) %>% 
    summarise(min = min(depth), max = max(depth), 
     median = median(depth)) 

ggplot(data, aes(x = cut, y = median, ymin = min, ymax = max)) + 
    geom_linerange() + 
    geom_pointrange() 

これはまったく同じプロットを生成します。お役に立てれば! enter image description here

+0

ありがとうございます。最初のオプションはうまく見えますが、tは 'stat_summary'を使わないでください。あなたの第二の選択肢も良いですが、それは本の後半で教えられるテクニックを使用しています。それでは別の方法がありますか? –

関連する問題