2017-05-30 9 views
0

geom_barスタックグラフをプロットされたものとは別の色で色付けする方法があるのでしょうか?geom_bar ggplot2カテゴリをプロットしていますが、追加の因子に基づいてカラースケールを割り当てています

明確にするために、種、数、日付、タイプの4つの要素からなるデータフレームがあります。

species count  date type 
1  a 20 2016-05-22 Phy 
2  b 34 2016-05-22 Phy 
3  c 45 2016-05-22 Phy 
4  d  4 2016-05-22 Zoo 
5  e 43 2016-05-22 Zoo 
6  f  9 2016-05-22 Bact 
7  g 19 2016-05-22 Bact 
8  h 32 2016-05-22 Bact 
9  a 16 2016-05-23 Phy 
10  b  0 2016-05-23 Phy 
11  c  0 2016-05-23 Phy 
12  d  2 2016-05-23 Zoo 
13  e 42 2016-05-23 Zoo 
14  f 23 2016-05-23 Bact 
15  g 22 2016-05-23 Bact 
16  h 21 2016-05-23 Bact 

だから私の問題は、私はggplotに積層バーをプロットしたいです:

ggplot(df, aes(x = date, y=count, group = species, fill = Species)) + 
    geom_bar(stat = "identity") 

それぞれにしかし、私は、「タイプ」によって決定されるバーの色をしたいと思いますカテゴリに分類されます。例えば、種a〜cがすべて「Phy」カテゴリーにある場合、種a、bおよびcは、例えば、青の異なる色合いである。

ご協力いただければ幸いです。

ありがとうございました! L

+0

スタートとして、あなたは 'ライブラリー(スケール)をロードする場合は、'あなたのような特定の色の異なる色合い生成を開始することができます、 'C(brewer_pal(パレットが= "ブルース")(5) brewer_pal(パレット= "グリーン")(3)) '。 – Marius

+0

複数の要因による色付けは、効果的な視覚化をめったにもたらしません。私は種で満たし、タイプにファセットを使用します。あなたが好きなら、その方法を使って回答を投稿することができます。 – neilfws

+0

@neilfwsそれはあまりにも好きなような例を見て実際に素晴らしいだろう! - ありがとうございました。 – Lmm

答えて

2

ここではタイプや種のための色のファセットを使用して、コメントをスレッドごととしてソリューションです。実際にこの例よりも効率的ではないかもしれませんが、データ内に存在する日付、タイプ、種の数によって異なります。

ggplot(df, aes(date, count)) + 
    geom_col(aes(fill = species)) + 
    facet_grid(. ~ type) + 
    scale_fill_brewer(palette = "Spectral") + 
    theme_light() 

enter image description here

+0

例をありがとう - 実際のデータでは、言及したように、日付/種が多すぎると思います。私はそれを試してみましょう。コードをいただきありがとうございます。データを表示するさまざまな方法を検討することは間違いありません! – Lmm

2

タイプファクタをタイプ別に並べ替え、異なるカラーパレットを縫い合わせるソリューションです。生成された特定の色が気に入らない場合は、別のパレットを選択してください。

library(forcats) 
library(tidyverse) 
library(scales) 

# Reorder the levels of the species factor by type 
df = df %>% 
    mutate(species = fct_reorder(species, as.numeric(type))) 
unique_df = df %>% distinct(type, species) 
type_counts = table(unique_df$type) 

colours = character(0) 
# Need to manually fill this at least up to the number of types 
palettes = c("Blues", "Greens", "Reds") 

for (i in 1:length(type_counts)) { 
    colours = c(colours, brewer_pal(palette = palettes[i])(type_counts[i])) 
} 

ggplot(df, aes(x = date, y=count, group = species, fill = species)) + 
    geom_bar(stat = "identity", colour = "black") + 
    scale_fill_manual(values = colours) + 
    theme_bw() 

Plot

+0

ありがとう@マリアス - 私はこれを試してみましょう! – Lmm

+0

@Lmm:プロットコードに 'facet_wrap(〜type)'を追加して、両方のソリューションの利点を得ることができます。 – Marius

+0

brewer_pal関数のパッケージはどれですか?フィードバックありがとうございます! – Lmm

0

データのこのタイプは非常によく適しslopegraphにあります。これは、積み重ねたバーチャルでは見えないクリアなパターンを示しています。

例えば、細菌種が1日目に異種の存在であったにもかかわらず、処理により2日目に1つの豊富に収束することが明らかになった。この植物は、治療によって有害な影響を受け、 "a"はわずかです。動物はほとんど影響を受けず、以前のコミュニティ構造を維持していました。

require(dplyr) 

ggplot(df, aes(date, count, group = species)) + 
    facet_grid(type ~ .) + 
    geom_line(aes(colour = type), size = 3, show.legend = F) + 
    geom_line() + 
    geom_text(data = function(x) {x %>% filter(date == min(date))}, 
      aes(label = species), nudge_x = -.025) + 
    theme_bw() 

enter image description here

関連する問題