2017-05-12 21 views
1

私は、ベクトルに格納されているいくつかのラベルの太字と標準フォントの両方を含むプロットにテキストラベルを追加したいと考えています。太字フォントと通常フォントのラベルのベクトルをプロット上に表示するにはどうすればよいですか?

私は1つのラベル(下のプロットの例では緑色で表示されています)を実行していましたが、1回のテキスト呼び出しで表示したいラベルがいくつかあると失敗しました。プロット)。ここで

は、以下のプロットを作成する例です:

plot(0,ylim=c(1,10),xlab="",ylab="",xaxt="n",yaxt="n") 

mylabels <- c("Some text in bold: normal text", "Some other text in bold: more normal text") 
text(x=rep(1, 2), y=c(10,9), labels=mylabels) 

# change labels to show bold font before the colon and normal behind 
mylabels.bold <- gsub("$","')", gsub(":", "'), ':", gsub("^","paste(bold('", mylabels))) 
#> mylabels.bold 
#[1] "paste(bold('Some text in bold'), ': normal text')"   
#[2] "paste(bold('Some other text in bold'), ': more normal text')" 

# this works 
text(x=1, y=8, labels=parse(text=mylabels.bold[1]), col="green") 

# this doesn't 
parsetext <- function(x) { parse(text=x) } 
text(x=rep(1, 2), y=c(7,6), labels=lapply(mylabels.bold,parsetext), col="red") 

example with labels in bold and normal font

そこで質問です:どのように私は赤い文字が緑色のように見てもらうことができますか?

答えて

1

これはこれを行う1つの方法です。だから、labels引数をループさせるのではなく、外側にループすることで、ラベルを一つずつ追加することができます。

plot(0, ylim=c(1,10), xlab="", ylab="", xaxt="n", yaxt="n") 
xs <- rep(1, 2) 
ys <- c(6, 7) 
for (i in seq_along(mylabels.bold)) { 
    text(x = xs[i], y = ys[i], labels = parse(text=mylabels.bold[1]), col = "red") 
} 

別の解決策を行うには、次のようになります。

plot(0,ylim=c(1,10),xlab="",ylab="",xaxt="n",yaxt="n") 
parsetext <- function(x) { parse(text=x) } 
text(x=rep(1, 2), y=c(7,6), labels=sapply(mylabels.bold,parsetext), col="red") 

あなたが?textのドキュメントを読んでいる場合は、ラベルは、文字ベクターまたは発現する必要があることでしょう。 lapplyはリストを作成するため、失敗するのはこのためです。一方、sapplyはベクトルを作成して動作します。

アウト:

enter image description here

+0

おかげで、これは確かに動作します。それでも私はlapply()で解決策を見たいと思うでしょう。または上記の例でlapplyが動作しない理由を理解することができます。誰ですか? – Stefan

+0

答えを更新しました。 'lapply'は' labels'引数が文字ベクトルである必要があるので動作しません。しかし、 'lapply'はリストを作成して動作しません。文字ベクトルを生成する 'sapply'に変更しました。 – LyzandeR

関連する問題