2012-11-20 1 views
5

私はファセットプロットを使用してデータのサブセットをプロットしようとしています。 2列x4行のプロットです。最初の列は120〜150、2番目の列は180〜250の値を持ち、変数はデータファイルでLesserまたはGreaterとして割り当てられます。私は列変数( "Lesser"、 "Greater")に特定のラベル( '120 < =ギリシャシンボル(アルファ)< = 150'、 '180 < =ギリシャシンボル(アルファ)< = 250) 。 「:比較は表現のために許可されていません 『私は』値でエラーが発生しました==」グレーターを取得ファセットラベリングR

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で、以前のように試してみました。.. は、我々がテストにあなたのデータを持っていない、事前

答えて

0

でいただきありがとうございます(また私たちは、あなたが使用しているコードを持っている)が、格子と経験プロットによって、bquoteまたはsapplyas.expressionのいずれかの組み合わせが必要な場合があります。試してみてください:コードの最初のセクションで

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

を、私はあなたがpasteexpressionを使用してではなく、最初のラベルを構築して、発現ベクターを構築しなければならないと思っていないでしょう。

あなたが必死になったら、最初にプロットを作成して、ラベルを別のものにすることができます。 How can I use grid to edit a ggplot2 object to add math expressions to facet labels?

+0

ありがとうございます。しかしこれも私の場合はうまくいかないようです。コードは実行されますが、出力プロットは生成されません。 – user1818565

+0

もちろん、出力は生成されません。あなたはコードやデータを提供しませんでした。私は、Brian Diggsがプロットマスを動かすためにphantom()戦略を使用したことを期待しています。 –

0

私は本当の答えはありませんが、これを希望しておくと役立ちます。私のソリューションは2つの小文字の記号でエラーを投げますが、私はバグのような行動をします。 (編集、下記のブライアンDiggsのコメントを参照するか、おそらく/うまくいけば、これはバグだらけされていない理由について先に答える。)

作品のサンプルデータは、私はより少なくよりtwolabsでいずれかのプラスに置き換えています注意してください。

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、それは価値がある何のために呼び出す呼び出すと思います。誰かがこれをさらに受け入れることができますか

+1

'<'はバイナリ演算子であり、それぞれが独自の左辺と右辺を必要とします( 'a

+0

これは完璧な意味合いがあります。ありがとう! – MattBagg

5

あなたはplotmath発現のためにするフォームは、あなたが最も簡単な方法は、これらの文字列への因子のレベルを設定することです

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

によってそのようにまたは間接的に取得することができます

expression(120 <= alpha~phantom() <= 150) 
expression(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) 
あなたが本当にあなた自身のラベラーを使用したい、としたくない場合は

enter image description here

基礎となるデータの要素レベルを変更することもできます。 「レッサー」と「大」レベルの模擬データを起動します。

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) 

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

+0

ありがとうございます。それは動作します。 :) – user1818565