2016-11-11 4 views
-3

タクのRデザインツールはggplot2 stat_summaryだと私はbarplotを拒否しました。ggplot stat_summaryで2つのコラムを表示するにはどうすればいいですか?

ここでの問題は、合計M.1.sumM.2.sumの列ヘッダーECG 1ECG 2とRテーブル構造の宣言であり、それぞれ、と思います。 means.long <- melt(M.1.sum, M.2.sum)でやろうとしています。 M.1.sumM.2.sumの各項目は、対応する行方向のIDがidsであり、データ構造そのものにも含める必要があります。 テーブルの列宣言と行宣言の提案は、aes(x=ids, y=value)です。ここで、valueは約ggplot宣言の和です。 コード

library('ggplot2') 
library('reshape2') 

M <- structure(c(-0.21, -0.205, -0.225, -0.49, -0.485, -0.49, 
    -0.295, -0.295, -0.295, -0.56, -0.575, -0.56, -0.69, -0.67, 
    -0.67, -0.08, -0.095, -0.095), .Dim = c(3L, 6L)) 
M2 <- structure(c(-0.121, -0.1205, -0.1225, -0.149, -0.485, -0.49, 
    -0.295, -0.295, -0.295, -0.56, -0.1575, -0.56, -0.69, -0.67, 
    -0.117, -0.08, -0.1095, -0.1095), .Dim = c(3L, 6L)) 

ids <- seq(1,6)  
M.1.sum <- colSums(M) 
M.2.sum <- colSums(M2) 

# http://stackoverflow.com/q/22305023/54964 
means.long <- melt(M.1.sum, M.2.sum) 
ggplot(means.long, aes(x=ids, y=value))+ # ,fill=factor(ids))) + 
    stat_summary(fun.y=mean, geom="bar",position=position_dodge(1)) + 
    scale_fill_discrete(name="ECG", 
         breaks=c(1, 2), 
         labels=c("1", "2"))+ 
    stat_summary(fun.ymin=min,fun.ymax=max,geom="errorbar", 
       color="grey80",position=position_dodge(1), width=.2) + 
    xlab("ID")+ylab("Sum potential") 

#deprecated because stat_summary designed for the case 
#barplot(M.1.sum, ids) 
#barplot(M.2.sum, ids) 

出力は見えない右

enter image description here

予想される出力:2つの項目

ので、この1 fill=factor(ids)))を使用する方法がわからない

の伝説と並んで6倍2列側テーブルの列にはラベルを付けませんでした。 テーブルをより良く作るにはどうすればいいですか?

はR:3.3.1
OS:ggplotでのDebian 8.5

+1

データ(またはデータのサンプル)を 'dput()'で再現可能に共有してください。コピー/ペースト可能で、データ構造を複製します。 – Gregor

+1

Tbh、 'sprintf(" sum(sum) ")'行はあまり役に立ちません。コンソールに表示されているコマンドと出力を表示するだけで明確になります。データを最小限に抑えるには、 'dput(head(M、20))'または類似のものを試してください。その他のアドバイスはこちら:http://stackoverflow.com/a/28481250/ – Frank

+0

また、 'sprintf(" M ")'のような行のポイントは何ですか?確かにこれは文字 "M"を印刷するだけです。関連性は何ですか? – Gregor

答えて

3

、少なくとも単一の描画層のためにその中にすべてのもの(例えば、すべてのバーのある単一のデータフレームを持つことが不可欠です計画)。列合計のデータフレームを作成し、IDとグループ化に外部ベクトルを使用しようとすると、作業が困難になります。

これは、私はそれを行うだろうかです:

means = rbind(
    data.frame(mean = colSums(M), source = "M", col = 1:ncol(M)), 
    data.frame(mean = colSums(M2), source = "M2", col = 1:ncol(M2)) 
) 

means$col = factor(means$col) 
## one nice data frame with everything needed for the plot  
means 
#  mean source col 
# 1 -0.6400  M 1 
# 2 -1.4650  M 2 
# 3 -0.8850  M 3 
# 4 -1.6950  M 4 
# 5 -2.0300  M 5 
# 6 -0.2700  M 6 
# 7 -0.3640  M2 1 
# 8 -1.1240  M2 2 
# 9 -0.8850  M2 3 
# 10 -1.2775  M2 4 
# 11 -1.4770  M2 5 
# 12 -0.2990  M2 6 

ggplot(means, aes(x = col, y = mean, fill = source)) + 
    geom_bar(stat = 'identity', position = 'dodge') 

enter image description here

あなたはあまりにもエラーバーをしたいように見えます。私はそれらのエラーバーを定義するものは何も分かりません - あなたがgeom_errorbarを見れば、それは美学yminymaxを期待しています。任意の値を計算して上のデータフレームに列として追加する場合は、エラーバーをプロットに追加するのは簡単です。

+0

エラーバーをここに統合しようとしています。私はあなたが 'sd'でR2エラーを行うことができると思います。私は 'y.sd'で使用できるデータ構造についてはわかりません。どう思いますか? –

+0

この質問を完了させてください。既にそれが修正されており、今すぐ回答されています。新しい問題がある場合は、新しい質問を開きます。 – Gregor

+2

この答えは言うまでもありません** ggplot2でエラーバーをプロットするための適切なデータ構造については非常に具体的です**:この答えの '平均'データフレームをとり、2つの列を追加してください。 1つはエラーバーのyminと1つはエラーバーのymaxです。* – Gregor

関連する問題