12列の.csv
ファイルとしてデータを保存しました。列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")
ただし、これはlabel
に対してF1
のみを示しています。
私の質問は、いくつかのF2, F3, ..., F11
を持つ1つのグラフでlabel
に対してdodge position
を表示する方法ですか? [0 1]の範囲内で同じスケールになるように、フィーチャを正規化しました。
テストデータは here にあります。私は問題を説明するために手で何かを描きました(以下を参照)。
プロットする前に、データを融解することで特定の形式でデータを取得する必要があります(融解したデータの外観については以下を参照)。そうでなければ、あなたがやったことは大丈夫のようです。
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()
ポイントを揃える方法は? 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
プロットパッケージについては言及していないので、ここではLattice
バージョンを使用して提案します(少なくともここにいるので、ラティスのものよりもggplot2の回答が多いと思います)。
## reshaping the data( similar to the other answer)
library(reshape2)
dat.m <- melt(TestData,id.vars='Label')
library(lattice)
bwplot(value~Label |variable, ## see the powerful conditional formula
data=dat.m,
between=list(y=1),
main="Bad or Good")
ラティスプロットのggplotバージョン:
library(reshape2)
library(ggplot2)
df <- read.csv("TestData.csv", header=T)
df.m <- melt(df, id.var = "Label")
ggplot(data = df.m, aes(x=Label, y=value)) +
geom_boxplot() + facet_wrap(~variable,ncol = 4)
プロット:
基本グラフィックスを使用して、at =
を使用してボックスの位置を制御し、ボックスの幅のboxwex =
と組み合わせることができます。最初のboxplot
ステートメントは、空白のプロットを作成します。次に、次の2つのステートメントに2つのトレースを追加します。
以下では、df[,-1]
を使用して、プロットする値から最初の(id)列を除外します。異なるデータフレームの場合、プロットするデータが含まれる列のサブセットにこれを変更する必要がある場合があります。
df <- data.frame(id = c(rep("Good",200), rep("Bad", 200)),
F1 = c(rnorm(200,10,2), rnorm(200,8,1)),
F2 = c(rnorm(200,7,1), rnorm(200,6,1)),
F3 = c(rnorm(200,6,2), rnorm(200,9,3)),
F4 = c(rnorm(200,12,3), rnorm(200,8,2)))
boxplot(df[,-1], xlim = c(0.5, ncol(df[,-1])+0.5),
boxfill=rgb(1, 1, 1, alpha=1), border=rgb(1, 1, 1, alpha=1)) #invisible boxes
boxplot(df[which(df$id=="Good"), -1], xaxt = "n", add = TRUE, boxfill="red", boxwex=0.25,
at = 1:ncol(df[,-1]) - 0.15) #shift these left by -0.15
boxplot(df[which(df$id=="Bad"), -1], xaxt = "n", add = TRUE, boxfill="blue", boxwex=0.25,
at = 1:ncol(df[,-1]) + 0.15) #shift these right by +0.15
私はこれが少し古い質問であることを知っていますが、それも私が持っていたものであり、受け入れられた答えは機能しますが、同様の何かをする方法がありますwithoutggplotや格子などの追加パッケージを使用します。ボックスプロットが並んで表示されるのではなく重なっているという点で、ニースほどではありませんが、
boxplot(data1[,1:4])
boxplot(data2[,1:4],add=TRUE,border="red")
これにより、2組の箱ひげ図が入れられ、2番目の箱ひげ図には赤のアウトライン(塗りつぶしなし)があり、外れ値も赤になります。良いことは、2つの異なるデータフレームに対して機能するのではなく、それらを機能させることです。早くて汚い方法。