2016-08-11 8 views
0

簡単な質問をすることをお詫び申し上げますが、ここ数日で解決策を見つけようとしました。下のデータフレームにはSampling.Station.Numberの下に8つのレベルがあります。したがって、私は、(1)Pipestrellus pygmaeusと呼ばれる検出された3種のバット種について、サンプリングステーションごとに3本のバーを示すサイドバイサイドバープロットを作成しようとしています。 (2)Pipestrellus pipestrellus; (3)ニャクサルス・ノクチュラ。複数の横並びのバープロットを1つの数値変数でグループ化

どのようにすればよいですか?私はいくつかの検索をしましたが、数値変数でグループ分けされた変数ではなく、x軸の要因の例しか見つけられませんでした。私は私が構築し、この箱ひげ図と同じフォーマットを持っているbarplotを生成したい最後に

enter image description here

私は以下のコードでこれらの箱ひげ図年代を作成:

  Sampling.Station.labels=c("1","2","3","4","5","6","7","8") 

     bat.labels<-c("Pipistrellus pygmaeus", "Pipestrellus pipestrellus", "Nyctalus noctula", 
         "Pipistrellus pygmaeus", "Pipestrellus pipestrellus", "Nyctalus noctula", 
         "Pipistrellus pygmaeus", "Pipestrellus pipestrellus", "Nyctalus noctula", 
         "Pipistrellus pygmaeus", "Pipestrellus pipestrellus", "Nyctalus noctula", 
         "Pipistrellus pygmaeus", "Pipestrellus pipestrellus", "Nyctalus noctula", 
         "Pipistrellus pygmaeus", "Pipestrellus pipestrellus", "Nyctalus noctula", 
         "Pipistrellus pygmaeus", "Pipestrellus pipestrellus", "Nyctalus noctula", 
         "Pipistrellus pygmaeus", "Pipestrellus pipestrellus", "Nyctalus noctula") 


     data_long <- gather(bats1, x, Mean.Value, Saparano.Pipestrelle:Noctule) 
     head(data_long) 

     stacked.data.1<-melt(data_long, id=c('Sampling.Station', 'x')) 
     head(stacked.data.1) 
     str(stacked.data.1) 


     stacked.data.1=stacked.data.1[, -3] 
     head(stacked.data.1) 
     colnames(stacked.data.1)<-c("Sampling.Station", "Bat.Species", "Light.Intensity") 
     head(stacked.data.1) 


     par(mfrow = c(1,1)) 
     boxplots.double.1=boxplot(Lighty.Intensity~Sampling.Station + Bat.Species, 
            data = stacked.data.1, 
            at = c(1:24), 
            ylim = c(min(0, min(0)), 
              max(30, na.rm = T)), 
            xaxt = "n", 
            notch=TRUE, 
            col = c("red", "blue", "green"), 
            cex.axis=0.7, 
            cex.labels=0.7, 
            ylab="Light Intensity (Lux)", 
            xlab="Sampling Stations", 
            space=1) 

     axis(side = 1, at = seq(3, 24, by = 1), labels = FALSE) 
     text(seq(3, 24, by=3), par("usr")[3] - 0.2, labels=unique(Sampling.Station.labels), srt = 45, pos = 1, xpd = TRUE, cex=0.8) 
     par(oma = c(4, 1, 1, 1)) 
     par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) 
     plot(0, 0, type = "n", bty = "n", xaxt = "n", yaxt = "n") 
     legend("top", 
       legend=c("Pipistrellus pygmaeus","Pipestrellus pipestrellus","Nyctalus noctula"), 
       fill=c("Blue", "Red", "Green"), 
       xpd = TRUE, horiz = TRUE, 
       inset = c(0,0), 
       bty = "n", 
       col = 1:4, 
       cex = 0.8, 
       title = "Bat Species", 
       lty = c(1,1)) 

私はRichardの提案を試みましたが、まだこのエラーメッセージが表示されています。これが可能である場合には、事前に多くの感謝:

data=format 

    Data structure: 

    'data.frame': 144 obs. of 5 variables: 
    $ Sampling.Station : num 1 1 1 2 2 2 3 3 3 4 ... 
    $ Light.Intensity.S : num 26.9 25.2 39 29.8 21.8 ... 
    $ Number.of.bat.passes: num 3 2 5 6 15 2 10 12 17 2 ... 
    $ Bat.Species   : Factor w/ 3 levels  "Common.Pipestrelle",..: 3 3 3 3 3 3 3 3 3 3 ... 
    $ Simpsons.Index  : num 0.4444 0 0 0.0278 0 ... 

     df %>% 
     gather(key = bat.species, value = value, -station) %>% 
     mutate(station = as.factor(station)) %>% 
     ggplot(aes(x = station, y = value, colour = variable)) + 
     geom_boxplot() + 
     facet_grid(~bat.species, scales = "free_y") 


     **Error in eval(expr, envir, enclos) : object 'Sampling.Station' not found** 

DATAFRAME

bats1<-structure(list(Sampling.Station = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 
4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 2, 2, 2, 3, 3, 3, 
4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 1, 1, 1, 1, 1, 1, 
2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 
2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 
1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 
7, 7, 7, 8, 8, 8, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 
7, 7, 7, 8, 8, 8, 1, 1, 1), Light.Intensity = c(26.9, 25.16, 
39, 29.81, 21.83, 20.22, 2.9, 2.1, 0.85, 0.62, 0.39, 0.26, 24.7, 
21.99, 20.46, 26.32, 0, 0, 0.43, 0.02, 0.02, 0.03, 0.02, 0.03, 
293.56, 167.79, 114.06, 17.22, 16.26, 4.76, 0.63, 0.56, 0.56, 
86.63, 87.97, 88.59, 0.31, 0.04, 0.05, 0, 0.01, 0.01, 0.02, 2.6, 
2.68, 2.62, 0.43, 0.44, 26.9, 25.16, 39, 29.81, 21.83, 20.22, 
2.9, 2.1, 0.85, 0.62, 0.39, 0.26, 24.7, 21.99, 20.46, 26.32, 
0, 0, 0.43, 0.02, 0.02, 0.03, 0.02, 0.03, 293.56, 167.79, 114.06, 
17.22, 16.26, 4.76, 0.63, 0.56, 0.56, 86.63, 87.97, 88.59, 0.31, 
0.04, 0.05, 0, 0.01, 0.01, 0.02, 2.6, 2.68, 2.62, 0.43, 0.44, 
26.9, 25.16, 39, 29.81, 21.83, 20.22, 2.9, 2.1, 0.85, 0.62, 0.39, 
    0.26, 24.7, 21.99, 20.46, 26.32, 0, 0, 0.43, 0.02, 0.02, 0.03, 
    0.02, 0.03, 293.56, 167.79, 114.06, 17.22, 16.26, 4.76, 0.63, 
    0.56, 0.56, 86.63, 87.97, 88.59, 0.31, 0.04, 0.05, 0, 0.01, 0.01, 
    0.02, 2.6, 2.68, 2.62, 0.43, 0.44), Number.of.bat.passes = c(3, 
    2, 5, 6, 15, 2, 10, 12, 17, 2, 0, 0, 15, 7, 17, 0, 1, 0, 14, 
    10, 12, 7, 4, 1, 3, 5, 3, 1, 6, 11, 3, 0, 0, 12, 11, 9, 1, 2, 
    1, 12, 14, 10, 3, 2, 1, 5, 4, 2, 3, 2, 5, 6, 15, 2, 10, 12, 17, 
    2, 0, 0, 15, 7, 17, 0, 1, 0, 14, 10, 12, 7, 4, 1, 3, 5, 3, 1, 
    6, 11, 3, 0, 0, 12, 11, 9, 1, 2, 1, 12, 14, 10, 3, 2, 1, 5, 4, 
    2, 3, 2, 5, 6, 15, 2, 10, 12, 17, 2, 0, 0, 15, 7, 17, 0, 1, 0, 
    14, 10, 12, 7, 4, 1, 3, 5, 3, 1, 6, 11, 3, 0, 0, 12, 11, 9, 1, 
    2, 1, 12, 14, 10, 3, 2, 1, 5, 4, 2), Bat.Species = structure(c(3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label =   c("Common.Pipestrelle", 
"Noctule", "Saprano.Pipestrelle"), class = "factor"), Simpsons.Index =   c(0.444444444, 
    0, 0, 0.027777778, 0, 0, 0.25, 0, 0.08650519, 0, 0, 0, 0.111111111, 
    0, 0.124567474, 0, 0, 0, 0.25, 0.01, 0.111111111, 0.081632653, 
    0, 0, 0, 0.04, 0, 1, 0.027777778, 0.033057851, 0.111111111, 0, 
    0, 0.027777778, 0.074380165, 0., 0, 0, 1, 0.173611111, 
    0.081632653, 0.16, 1, 0.25, 0, 0.04, 0.25, 0.25, 0.25, 0, 0, 
    7, 0, 0, 0, 0, 0.08, 0, 0, 0, 0.6, 0, 0.222222222, 0, 0, 0, 0.142857143, 
    9, 0.5, 1.25, 0, 0, 0, 4, 0, 0, 5, 2, 1, 0, 0, 1.25, 0.888888889, 
    5, 0, 0, 2, 0.28, 0.625, 0.375, 0, 1, 0, 4, 0.5, 1, 0, 0, 1, 
    0, 0.109375, 0, 0, 0, 0.75, 0, 0, 0, 0, 0.08, 0.046875, 0, 0, 
    0, 0, 0, 0.046875, 0, 0, 0, 0, 0.0625, 0, 0, 0, 0.015625, 0, 
    0, 0, 0.28, 0, 0.12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), row.names = c(NA, 
    -144L), .Names = c("Sampling.Station", "Light.Intensity",   "Number.of.bat.passes", 
    "Bat.Species", "Simpsons.Index"), class = "data.frame") 
+0

あなたはy軸上の分光値をしたいですか? D.SP、D.CP、およびD.Nの列の値で何をしたいですか?あなたはy軸上にそれらを望んでいないという意味ですか?よくわかりません。 – MrFlick

+1

画像には、バープロットではなく、ボックスプロットが表示されます。あなたは何を望んでいるのですか? – AlexR

+1

'tidyr :: gather'を使ってデータフレームを作り直してから、変数名をfacet_wrapしてください。 –

答えて

0

私はあなたが後にしているかを正確に確認していません。これが私がこれらのデータで行うことです。私はバカルトよりボックスプロットを使用しました。なぜなら、後者は一般的にバリエーションを表示するのにかなり役に立たないと思うからです。

library("dplyr") 
library("tidyr") 
library("ggplot2") 

df %>% 
    gather(key = variable, value = value, -Sampling.Station.Number) %>% 
    mutate(Sampling.Station.Number = as.factor(Sampling.Station.Number)) %>% 
    ggplot(aes(x = Sampling.Station.Number, y = value, colour = variable)) + 
    geom_boxplot() + 
    facet_wrap(~variable, scales = "free_y") 

データ

df <- structure(list(Sampling.Station.Number = c(1L, 1L, 1L, 2L, 2L, 
2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 
8L, 8L, 8L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 
6L, 6L, 7L, 7L, 7L, 8L, 8L, 8L, 1L, 1L, 1L), Spectrometer = c(26.9, 
25.16, 39, 29.81, 21.83, 20.22, 2.9, 2.1, 0.85, 0.62, 0.39, 0.26, 
24.7, 21.99, 20.46, 26.32, 0, 0, 0.43, 0.02, 0.02, 0.03, 0.02, 
0.03, 293.56, 167.79, 114.06, 17.22, 16.26, 4.76, 0.63, 0.56, 
0.56, 86.63, 87.97, 88.59, 0.31, 0.04, 0.05, 0, 0.01, 0.01, 0.02, 
2.6, 2.68, 2.62, 0.43, 0.44), D.SP = c(0.667, 0, 0, 0.167, 0, 
0, 0.5, 0, 0.294, 0, 0, 0, 0.333, 0, 0.353, 0, 0, 0, 0.5, 0.1, 
0.333, 0.286, 0, 0, 0, 0.2, 0, 1, 0.167, 0.182, 0.333, 0, 0, 
0.167, 0.273, 0.111, 0, 0, 1, 0.417, 0.286, 0.4, 1, 0.5, 0, 0.2, 
0.5, 0.5), D.CP = c(0.333, 1, 0.4, 1.167, 0.533, 1, 0, 0.167, 
0.118, 0, 0, 0, 1, 0.714, 0.471, 0, 1, 0, 0.5, 0.9, 0.667, 0.714, 
1, 1, 1, 0.8, 1, 0, 0.833, 0.727, 0.333, 0, 0, 0.417, 0.727, 
0.556, 1, 1, 2, 0.583, 0.714, 0.6, 0, 0.5, 1, 0.8, 0.5, 0.5), 
    D.N = c(0, 0, 0.8, 0, 0.467, 0, 0, 0, 0.176, 1, 0, 0, 0, 
    0.286, 0.176, 0, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0.2, 0, 0, 
    0, 0.091, 0, 0, 0, 0.583, 0, 0.333, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0)), .Names = c("Sampling.Station.Number", "Spectrometer", 
"D.SP", "D.CP", "D.N"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", 
"36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", 
"47", "48")) 
+0

こんにちはリチャード、私に戻ってくれてありがとう、あなたの提案には、深く感謝しました..私はあなたのコードを使用しようとしました**このエラーメッセージを返す**エラー:STRSXP **と互換性がありません。私は、xの階乗の列名をbat.speciesに変更してから、bat.speciesをコードの変数に置き換えました。しかし、私はまだ間違っていることを見ることができません。formatというデータセットのデータの構造を入力しました(上の図を参照)。どんな提案も温かく受け入れられます。もう一度ありがとうございます –

+0

上記の新しいコードでは、おそらくfacet_wridはfacet_wrapではありません –

+0

'gather(key = bat.species、value = value、 - format $ Sampling.Station.Number)'はおそらくフォーマット$ Samplingとしては機能しません。 Station.Numberはdfの列ではありません –

関連する問題