5

ファセット プロットを使用してデータのサブセットをプロットしようとしています。2列×4列のプロットです。最初の列は 120 から 150 の間の値、2 番目の列は 180 から 250 の間の値で、変数はデータファイルで Lesser または Greater として割り当てられます。特定のラベル ('120 <= greek symbol(alpha) <= 150', '180 <= greek symbol(alpha) <= 250) を列変数 ("Lesser", "Greater") に追加する際に問題に直面しています。 . 私はそれを次のようにしてみました:

require(graphics)
library(ggplot2)
hp <- ggplot2(data) + ....
xlow <- paste("120 <", expression(alpha), " < 150") 
xhi <- paste("180 <", expression(alpha), " < 250")
mf_labeller <- function(var, value){
  value <- as.character(value)
  if (var=="regime") {
  value[value=="Lesser"] <- xlow
  value[value=="Greater"]  <- xhi
}
  return(value) 
}
(hp %+% data) + facet_grid(param~regime,  scales="free", labeller=mf_labeller)

「値のエラー == "より大きい" : 式の比較は許可されていません」というメッセージが表示されます。私もデータを強制しようとしました。何らかの方法でラベル付けを行う場合:

data2 <- transform(data, regime = factor(regime, levels=c("Lesser", "Greater"), labels=c(expression(paste("120 <", alpha," < 150")), expression("180 < alpha < 250"))))

目的のプロットではなく、式全体を逐語的に取得します。私は何かが欠けているかもしれません。どんな助けでも本当に感謝しています!! 前もって感謝します..

私のサンプルの抜粋は次のとおりです。

regime,param,line,XX,Var,sner
Lesser,Rise,VII,AA,4.968624,0.1275248
Lesser,Rise,VII,BB,3.719405,0.08470305
Lesser,Rise,VII,CC,7.608773,0.177848
Lesser,Rise,VII,DD,9.874395,0.1367159
Lesser,Text,VII,AA,4.968624,0.1275248
Lesser,Text,VII,BB,3.719405,0.08470305
Lesser,Text,VII,CC,7.608773,0.177848
Lesser,Text,VII,DD,9.874395,0.1367159
Lesser,Chant,VII,AA,0.1771826,0.186758
Lesser,Chant,VII,BB,0.3611497,0.5484656
Lesser,Chant,VII,CC,0.7719002,0.8864444
Lesser,Chant,VIII,DD,1.829022,0.2639881
Greater,Rise,VII,AA,4.968624,0.1275248
Greater,Rise,VII,BB,3.719405,0.08470305
Greater,Rise,VII,CC,7.608773,0.177848
Greater,Rise,VII,DD,9.874395,0.1367159
Greater,Text,VII,AA,4.968624,0.1275248
Greater,Text,VII,BB,3.719405,0.08470305
Greater,Text,VII,CC,7.608773,0.177848
Greater,Text,VII,DD,9.874395,0.1367159
Greater,Chant,VII,AA,0.1771826,0.186758
Greater,Chant,VII,BB,0.3611497,0.5484656
Greater,Chant,VII,CC,0.7719002,0.8864444
Greater,Chant,VIII,DD,1.829022,0.2639881

使用したコード: 以前の式を投稿で間違った方法で書きましたが、コードでは正しいものを使用しました。

x <- read.table("sample.csv", header=T, sep=',')
require(graphics)
library(ggplot2)
ppi <- 300
png("figure.png", width=6*ppi, height=6*ppi, res=ppi)
hp <- ggplot(data=x,aes(x=XX, y=Var, colour=line, group = line)) + geom_errorbar(aes(ymin=Var-sner, ymax=Var+sner, colour=line), width=.3) + geom_line(aes(ymax=Var+sner), size=0.7) + geom_point(aes(ymax=Var+sner), shape=21, size=2,fill="white") + theme_bw() + theme(axis.text.x = element_text(angle=90,vjust=0.25), panel.grid.minor=element_blank(), panel.grid.major=element_blank(), panel.background =element_blank(), legend.position="none" ) + scale_colour_hue(l=40) 
xlow <- expression(paste("120 <",alpha," < 150"))
xhi <- expression(paste("180 <", alpha," < 250"))
.. earlier code block as alternative here...
data2 <- transform(x, regime = factor(regime, levels=c("Lesser", "Greater"), labels=c( bquote(120<.(alpha)~phantom()<150), bquote(180<.(alpha)~phantom()<250) )
(hp %+% data2) + facet_grid(param~regime,  scales="free", labeller=label_bquote)

私もmf_labellerで以前と同じように試しました..よろしくお願いします

4

3 に答える 3

6

プロット式に必要な形式は次のとおりです。

expression(120 <= alpha~phantom() <= 150)
expression(180 <= alpha~phantom() <= 250)

あなたはその方法で、または間接的に得ることができます

parse(text="120 <= alpha~phantom() <= 150")
parse(text="180 <= alpha~phantom() <= 250")

最も簡単な方法は、因子のレベルをこれらの文字列に設定し、label_parsed関数を使用することです。

mtcars再現可能な例を提供しなかったため、これをデータでモックアップします。

dat <- mtcars   
dat$regime <- factor(dat$am)
levels(dat$regime) <- list("120 <= alpha~phantom() <= 150" = "0",
                           "180 <= alpha~phantom() <= 250" = "1")

ggplot(aes(x=wt, y=mpg), data=dat) +
  geom_point() +
  facet_grid(cyl ~ regime, labeller=label_parsed)

ここに画像の説明を入力

独自のラベラーを本当に使用したいが、基になるデータの因子水準を変更したくない場合は、それも可能です。「小さい」レベルと「大きい」レベルのモック データから始めます。

dat <- mtcars   
dat$regime <- factor(dat$am, levels=c(0,1), labels=c("Lesser", "Greater"))

次に、ラベラー関数と ggplot コードは次のようになります。

mf_labeller <- function(var, value){
  value <- as.character(value)
  if (var=="regime") {
    value[value=="Lesser"] <- "120 <= alpha~phantom() <= 150"
    value[value=="Greater"]  <- "180 <= alpha~phantom() <= 250"
    value <- lapply(value, function(x) parse(text=x))
  }
  return(value) 
}

ggplot(aes(x=wt, y=mpg), data=dat) +
  geom_point() +
  facet_grid(cyl ~ regime, labeller=mf_labeller)

グラフは同じように見えます。

于 2012-11-20T21:21:17.297 に答える
0

テストするデータはありませんが(使用しているコードもありません)、ラティスプロットの経験から、とのいずれかbquoteまたはいくつかの組み合わせが必要になる可能性があることがsapplyわかりました。as.expression試す :

..., labels=c( bquote(120<.(alpha)~phantom()<150), bquote(180<.(alpha)~phantom()<250) )

expressionコードの最初のセクションでは、内部で使用する必要があるとは思いませんでしたがpaste、最初にラベルを作成してから、発現ベクターを作成します。

必死になったら、最初にプロットを作成してから、ラベルを別のものにすることができます。グリッドを使用してggplot2オブジェクトを編集し、ファセットラベルに数式を追加するにはどうすればよいですか?

于 2012-11-20T20:35:29.057 に答える
0

本当の答えはありませんが、参考になれば幸いです。私のソリューションは、2 つの小なり記号でエラーをスローしますが、1 つでは機能します。これは、バグのある動作だと思います。(編集、下の Brian Diggs のコメントを参照するか、これがバグではない理由について、おそらく/できれば上の回答を参照してください。)

動作するサンプル データ。2 つのラボで 1 未満をプラスに置き換えていることに注意してください。

twolabs  <- c("120<alpha+150","150<alpha+250")
df<- data.frame(x=rnorm(mean=4,40),
   y=rnorm(mean=4,40),
   labs=sample(twolabs,40,replace=T))

このプロットは美しく機能します。

ggplot(df,aes(x=x,y=y))+geom_point()+facet_grid(.~labs,labeller=label_parsed)

ただし、2 つの小なり記号を含むデータはエラーをスローします。

twolabs  <- c("120<alpha<150","150<alpha<250")
df2<- data.frame(x=rnorm(mean=4,40),
   y=rnorm(mean=4,40),
   labs=sample(twolabs,40,replace=T))

> ggplot(df2,aes(x=x,y=y))+geom_point()+facet_grid(.~labs,labeller=label_parsed)
Error in parse(text = x) : <text>:1:10: unexpected '<'
1: 120<alpha<

label_parsed を使用することで、最終的には gridDevices::plotmath を呼び出すことができると思います。誰かがこれをさらに進めることができますか?

于 2012-11-20T21:18:36.127 に答える