2016-09-12 3 views
1

私は、メインサイトと衛星の位置の違いを強調する一連の棒グラフ(複数のサイトを複製する)を作成しようとしています。私はgeom_pointを使用していくことができますが、棒グラフとして表示したいと思います。棒グラフは最低のポイントから始まり、メインサイトとサテライトの場所のラベルとその違いが表示されます。ここでは、私が持っているもののサンプルコードとスクリーンショット、そしてそのように見せたいもののアイデアがあります。バーの開始点がゼロより大きいRで棒グラフを作成するにはどうすればよいですか?

library(ggplot2) 
library(dplyr) 

site <- c("Site A", "Main Site", "Site A", "Main Site", "Site A", "Main Site") 
year <- c("2013", "2013", "2014", "2014","2015", "2015") 
value <- c(57, 74, 60, 50, 60, 68) 

df <- data.frame (site, year, value) 

df %>% 
    mutate (label = paste0(site, " (", value, ")")) %>% 
    ggplot (aes (x = year, y = value, group = site, colour = site)) + 
    geom_point (size = 0.5) + 
    scale_y_continuous(limits = c (0,100)) + 
    geom_text (aes(label = label)) 

enter image description here

enter image description here

+5

棒グラフは0から始まります。しかし、あなたが好きな場所四角形を描画するために 'geom_rect'を使用することができます。 – Gregor

答えて

1

@gregorからのコメントにフォローアップ、あなたは(dcastreshape2からのものであり、dplyr

df %>% 
    dcast(year~site) %>% 
    mutate(midpt = (`Main Site` + `Site A`)/2 
     , dir = factor((`Main Site` - `Site A`) > 0 
         , levels = c(FALSE,TRUE) 
         , labels = c("Negative", "Positive")) 
     , diff = abs(`Main Site` - `Site A`)) %>% 
    ggplot(aes(x = year 
      , y = midpt 
      , fill = dir 
      , height = diff)) + 
    geom_tile() + 
    scale_fill_manual(values = c("Positive" = "darkgreen" 
           , "Negative" = "red3")) 

を多用注意以下試すことができますenter image description here

サイトが3つ以上ある場合は、おそらくdplyrを直接使用して、より柔軟なソリューションが必要になります。

+0

ありがとう、しかし、それは私が望んでいた方法を正確に動作しません。チャートの上部と下部はデータに対応する必要があります。私が投稿しようとしている力ずくで解決策を管理しました。 – Greg

+0

以前のバージョンについては残念です。高さを再計算/追加する手順を忘れました。 (愚かな間違いですが、今修正されましたが、確かに 'geom_rect'を使用するよりも良いとは確信していません) –

+0

ありがとうございます - 私はあなたが肯定的/否定的な結果に基づいて要因を設定する方法が好きです。私はそれを使用します。 – Greg

1

@Gregorからのコメントを使用して、私はうまくいく何かを思いついた。おそらく最も洗練されたソリューションではないでしょうが、今のところうまくいくでしょう。

df %>% 
    spread(site, value) %>% 
    mutate (diff = SiteA - MainSite) %>% 
    mutate (AboveBelow = recode (diff," -100:-1 = 'Below'; 
           0 = 'No Difference'; 
           1:100 = 'Above'")) %>% 
    ggplot() + 
    scale_x_continuous(name = "Year", breaks = c (2013, 2014, 2015)) + 
    scale_y_continuous(name = "Percentage", limits = c(0,100)) + 
    geom_rect (aes (xmin = year - 0.33, xmax = year + 0.33, ymin = SiteA, ymax = MainSite, fill = AboveBelow)) + 
    geom_text (aes (x = year, y = ifelse (diff < 0, MainSite + 5, MainSite - 3), label = paste0("MainSite - ", MainSite))) + 
    geom_text (aes (x = year, y = ifelse (diff < 0, SiteA - 3, SiteA +5), label = paste0("SiteA - ", SiteA))) + 
    geom_text (aes (x = year, y = MainSite + (diff/2), label = diff)) + 
    scale_fill_manual(values = c("green", "red", "white")) 

は私にこれを与える:

enter image description here

関連する問題