8

簡単な例があります。完全に交差した3つの治療の3つのコンテキストの実験で、各治療のコンテキストのペアに対して継続的な効果が測定されました。コンテキストごとに個別に、効果ごとに各治療を注文したいのですが、ggplotのファセットに固執しています。

これが私のデータです

df <- data.frame(treatment = rep(letters[1:3], times = 3),
                 context = rep(LETTERS[1:3], each = 3),
                 effect = runif(9,0,1))

そして、治療と文脈を単一の9ポイントのスケールに折りたたむと、非常に近いものを得ることができます。

df$treat.con <- paste(df$treatment,df$context, sep = ".")
df$treat.con <- reorder(df$treat.con, -df$effect, )

ggplot(df, aes(x = treat.con, y = effect)) +
           geom_point() +
           facet_wrap(~context, 
                      scales="free_x",
                      ncol = 1)

私が欲しいものに非常に近い

各ファセットで個別の順序付けを実現することを除いて、私が作成した新しいx変数は、3つのコンテキストすべてで同じ処理を使用したことを示していないため、誤解を招く可能性があります。

これは根本的な要因の操作によって解決されますか、それともこの状況のた​​めのggplotコマンドがありますか?

4

2 に答える 2

5

ファセットは、スケールが共有されている状況向けに設計されているため、実際にやりたいことには適していません。

各プロットを個別に作成してgrid.arrangeから、gridExtraパッケージを使用してそれぞれを配置する方が理にかなっている場合があります。(これらのツールに精通していない場合、次のコードは少しわかりにくいように見えるかもしれません!)

#I use stringsAsFactors simply to ensure factors on
# my system.
df <- data.frame(treatment = rep(letters[1:3], times = 3),
                 context = rep(LETTERS[1:3], each = 3),
                 effect = runif(9,0,1),stringsAsFactors = TRUE)

require(gridExtra)
#One "master" plot (to rule them all)
p <- ggplot(df,aes(x = treatment,y = effect)) + 
        geom_point() + 
        facet_wrap(~context)

#Split data set into three pieces    
df_list <- split(df,df$context)
#...and reorder the treatment variable of each one
df_list <- lapply(df_list,function(x){x$treatment <- reorder(x$treatment,-x$effect); x})

#"Re-do" the plot p using each of our three smaller data sets
# This is the line that might be the most mysterious            
p_list <- lapply(df_list,function(dat,plot){plot %+% dat},plot = p)

#Finally, place all three plots on a single plot
do.call(grid.arrange,p_list)

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

于 2012-07-06T15:16:21.633 に答える
4

試す:

ggplot(df, aes(x = treat.con, y = effect)) +
  geom_point() +
  facet_wrap(~context, scales="free_x", ncol = 1) +
  scale_x_discrete(labels=function(x) substr(x,1,1))

引数に提供される無名関数labelsは、ラベルのフォーマットを行います。ggplot2の古いバージョンではformatter、この引数を使用していました。治療名の長さが異なる場合、このsubstrアプローチはうまく機能しない可能性がありますが、次のように使用できますstrsplit

+ scale_x_discrete(labels=function(x) sapply(strsplit(x,"[.]"),"[",1))
于 2012-07-06T15:18:06.257 に答える