2017-05-24 18 views
2

私はfacet_wrapから3x3グリッドを得たプロットを作成しています。 9つのプロットのうち8つはgeom_violinを使用し、残りのプロットはgeom_barを使用して作成します。サイト上で役に立つ答えを見つけた後、私はこれをすべて有効にしました。私が持っている問題は、棒グラフにを使用すると、これらの線がの中に表示され、バーに表示されることです。ggplot2棒グラフの棒グラフ

ここにいくつかのコードと図があります。私の質問に

library(tidyverse) 
n <- 100 
tib <- tibble(value = c(rnorm(n, mean = 100, sd = 10), rbinom(n, size = 1, prob = (1:4)/4)), 
       variable = rep(c("IQ", "Sex"), each = n), 
       year = factor(rep(2012:2015, n/2))) 
ggplot(tib, aes(x = year, y = value)) + 
    facet_wrap(~variable, scales = "free_y") + 
    geom_violin(data = filter(tib, variable == "IQ")) + 
    geom_bar(data = filter(tib, variable == "Sex"), stat = "identity", 
      color = "black", fill = "white") 

enter image description here

は:どのように私はバーの内側、これらの線を取り除くのですか?私はそれが黒のボーダーで白であることを望んでいるだけです。私はいろいろな構成を試していましたが、私はその線を取り除くことができましたが、ファセットをねじ込むことを犠牲にしました。私はそれがstatと関係があると確信していますが、私はそれを修正しようとしています。助言がありますか?

+1

実際にファセットを使用しますか?軸は実際には異なるので、2つのプロットを別々に作成し、例えばプロットを使用して一緒にプロットする方が簡単です。 'library(cowplot) ' – FlorianGD

+0

@FlorianGD共通のタイトルやすべてを使って、すべてのプロットを簡単にまとめることができます。それらはすべて同じx軸を共有します。しかし、たぶん私は「カウプロット」をチェックする必要があります。 – hejseb

+1

は、tib $ valueの値を自動的に積み重ねるため、黒いバーがあります。 position_dodgeまたは最初の平均値を1年あたりに使用することができます。あなたが最初に欲しいもの、価値の比を知ることは重要ですか? – timfaber

答えて

3

私はbarplot内のデータをまとめたことをお勧め:

ggplot(tib, aes(x = year, y = value)) + 
    facet_wrap(~variable, scales = "free_y") + 
    geom_violin(data = filter(tib, variable == "IQ")) + 
    geom_bar(data = tib %>% 
      group_by(year,variable) %>% 
      summarise(value=sum(value)) %>% 
      filter(variable == "Sex"), 
      stat = "identity", 
      color = "black", 
      fill = "white") 
+0

それは魅力的に機能しました。ありがとう。 – hejseb

3

、私は非常に異なるものを表す異なるパネルのy軸で、これはデータを表現するための良い方法であるか分かりません、実際のユースケースと一致しない可能性があります。別のプロットを作成してからgridExtra::grid.arrange、またはcowplot::plot_gridを使用する方がよいでしょう。

しかし、あなたは私がstat = identityを使用する必要はありませんgeom_colではなくgeom_barを使用して、この

ggplot(tib, aes(x = year, y = value)) + 
    facet_wrap(~variable, scales = "free_y") + 
    geom_violin(data = filter(tib, variable == "IQ")) + 
    geom_col(data = filter(tib, variable == "Sex") %>% 
        group_by(year, variable) %>% 
        summarise(value = sum(value)), 
    fill = "white", colour = "black") 

をしたい場合。

+0

私は間違いなくcowplotを調べます(前にgridExtraを使用しましたが、ここで私の目的は少し複雑だと思っていました - 特に境界線でプロットできるようになりました)。 (CMichaelはほんの数分しかかかりませんでしたので、私はその答えを受け入れました) – hejseb

+0

dplyrが独立したコーダーからほぼ同じコードをどのように生成するのが大好きです。 – CMichael