1. ホーム
  2. r

[解決済み] 複数のBoxplotを1つのグラフにプロットする

2022-03-10 10:18:16

質問

で保存したデータを .csv ファイルには12列のカラムがあります。2列目から11列目(ラベルは F1, F2, ..., F11 ) は features . Column one には label これらの機能のうち、どちらか good または bad .

をプロットしたいと思います。 boxplot これら11の機能すべて に対して label で区切られていますが good または bad . 今までの私のコードは

qplot(Label, F1, data=testData, geom = "boxplot", fill=Label, 
          binwidth=0.5, main="Test") + xlab("Label") + ylab("Features")

しかし、これでは F1 に対して label .

質問:どのように F2, F3, ..., F11 に対して label を1つのグラフに表示し、いくつかの dodge position ? 0 1] の範囲内で同じスケールになるように正規化しました。

テストデータは以下の通りです。 ここで . 問題を説明するために手書きで何かを描きました(下記参照)。

解決方法は?

プロットする前に、データを融解して特定の形式にする必要があります(融解したデータがどのように見えるかは下記を参照)。それ以外は問題ないようです。

require(reshape2)
df <- read.csv("TestData.csv", header=T)
# melting by "Label". `melt is from the reshape2 package. 
# do ?melt to see what other things it can do (you will surely need it)
df.m <- melt(df, id.var = "Label")
> df.m # pasting some rows of the melted data.frame

#     Label variable      value
# 1    Good       F1 0.64778924
# 2    Good       F1 0.54608791
# 3    Good       F1 0.46134200
# 4    Good       F1 0.79421221
# 5    Good       F1 0.56919951
# 6    Good       F1 0.73568570
# 7    Good       F1 0.65094207
# 8    Good       F1 0.45749702
# 9    Good       F1 0.80861929
# 10   Good       F1 0.67310067
# 11   Good       F1 0.68781739
# 12   Good       F1 0.47009455
# 13   Good       F1 0.95859182
# 14   Good       F1 1.00000000
# 15   Good       F1 0.46908343
# 16    Bad       F1 0.57875528
# 17    Bad       F1 0.28938046
# 18    Bad       F1 0.68511766

require(ggplot2)
ggplot(data = df.m, aes(x=variable, y=value)) + geom_boxplot(aes(fill=Label))

<イグ

編集する ファセットする必要がありそうなことに気がつきました。こちらも実装してみました。

p <- ggplot(data = df.m, aes(x=variable, y=value)) + 
             geom_boxplot(aes(fill=Label))
p + facet_wrap( ~ variable, scales="free")

<イグ

2を編集します。 を追加する方法 x-labels , y-labels , title , 変更 legend heading を追加する。 jitter ?

p <- ggplot(data = df.m, aes(x=variable, y=value)) 
p <- p + geom_boxplot(aes(fill=Label))
p <- p + geom_jitter()
p <- p + facet_wrap( ~ variable, scales="free")
p <- p + xlab("x-axis") + ylab("y-axis") + ggtitle("Title")
p <- p + guides(fill=guide_legend(title="Legend_Title"))
p 

<イグ

3を編集します。 アライメントの取り方 geom_point() を box-plot の中央に配置することはできますか?それは position_dodge . これでうまくいくはずです。

require(ggplot2)
p <- ggplot(data = df.m, aes(x=variable, y=value)) 
p <- p + geom_boxplot(aes(fill = Label))
# if you want color for points replace group with colour=Label
p <- p + geom_point(aes(y=value, group=Label), position = position_dodge(width=0.75))
p <- p + facet_wrap( ~ variable, scales="free")
p <- p + xlab("x-axis") + ylab("y-axis") + ggtitle("Title")
p <- p + guides(fill=guide_legend(title="Legend_Title"))
p 

<イグ