3

私はRにかなり慣れていませんが、順調に進んでいます。箱ひげ図のx軸に沿ってカテゴリラベルがプロットされる順序を除いて、ggplot2を思い通りに曲げることができました。これは、数式でデータフレームの範囲に対処する方法についての私の知識の単なる穴だと思いますが、これがdfと呼ばれるデータフレームとしての偽のデータです。

Index    Label    Value
index1   A        1
index2   A        2
index3   A        3
index4   B        12
index5   B        11
index6   B        10
index7   C        8
index8   C        7
index9   C        9
...
index76  Z        15
index77  Z        17
index78  Z        16

私のプロットコードは次のようqplot(df$Label, df$Value, data=df) + scale_x_discrete("Label") + opts(axis.text.x = theme_text(angle = 90, hjust = 0, size=7)) + geom_boxplot()になり、私が望むものを正確に示します。これは、ラベルA用、B用、C用の1つの箱ひげ図を示す箱ひげ図です。ただし、軸はラベルの順序になります(箱ひげ図1,2,3が原点に最も近く、中央が10,11,12、グラフの右側が7,8,9)。私が欲しいのは、箱ひげ図のデータが、ラベル平均内で最も高いサブセットから始まり、降順で進むことです。mean(df$Label[1:3])各ラベル内でなどで平均化することはできますが、ラベルのプロットが表示される順序(つまり、xに沿ったA、B、C)にmean(df$Label[4:6])ならないようにグラフを表示する方法がわかりません。factor(df$Label)ボックスは2、11、8)ですが、ラベル内の平均が高いものから低いものの順になっています(つまり、xに沿ってB、C、An、次に11、8、2のボックス)。

ラベル内の各平均で構成されるベクトルを作成し、それをggplotに渡して軸の順序を指定することを考えていますが、最初にベクトルを作成する方法がわかりません。

私が知る必要があるのは:

最高から最低の順に、各ラベルの平均で構成されるベクトルを取得するための最良の方法は何ですか?

そのベクトルをに渡して、軸にggplotラベルを付けながら、それらの値でx軸を並べ替えるにはどうすればよいですか。xfactor(df$Label)

データを表示する他の方法についても提案を受け付けていますが、私は自分が望むものにかなり近いと思います。特定のラベル内の値の平均と広がりが重要です。

4

2 に答える 2

5

これを行う1つの方法があります

# create a dummy data frame
set.seed(1234)
df = data.frame(
       label = rep(letters[1:3], each = 3),
       value = sample(100, 9))

# boxplot without sorting
qplot(label, value, data = df, geom = 'boxplot')

ここに画像の説明を入力してください

# boxplot with label sorted by median of value
qplot(reorder(label, value, median), value, data = df, geom = 'boxplot')

ここに画像の説明を入力してください

于 2011-04-26T01:59:15.200 に答える
0

Label要因です。as.numeric(df$Label)因子の各レベルが対応する数を確認してください。ggplot2 は、数値レベルの順序でラベルを使用する可能性があります。levelsに引数を渡すことにより、因子のレベルを順序付けることができますfactor。たとえば、ベクトル内の各ラベルが , の順序である場合ordered.levels=c("B","C","A",...)、明示的なlevels引数df$Label <- factor(as.character(df$Label), levels=ordered.levels).

これはすべて、ggplot2 がレベルの数値を使用してプロットを並べ替えることを前提としています。

于 2011-04-26T01:29:06.617 に答える