6

これは、この質問のフォロー アップの質問です: `text` で使用される `bquote` 式に新しい行を含めるにはどうすればよいですか?

しかし今、私は伝説の中にそれを持っており、これは物事を変えるようです.

私は次のことを試しました:

test<-c(10:1)
dummy1<-0.004323423
dummy2<-0.054
dummy3<-0.032
plot(test,c(1:10))
legend("topright", 
 legend=c(bquote(Qua_0,99^normal == .(round(dummy1,4))),bquote(Qua_0,95^normal == .(round(dummy2,4))),bquote(Qua_0,99^t == .(round(dummy3,4)))),
 bty = "n",lwd=2, cex=1, col=c("red","black","darkgreen"), lty=c(1,3,5))

だから、私はしたいです

  1. 式が正しいため、インデックス 0,95 が正しく記述され、累乗 ^ も正しい

  2. 等号の後の改行

  3. lignと同じ色付きのテキストなので、最初は赤になります

既存の投稿の回答を実装しようとしましたが、わかりませんでした.topも機能していません。

4

2 に答える 2

6

最初に 3 つの式のベクトルsubstituteを作成し、適切なダミー値を作成するために使用します。as.expressionすぐに評価されないように使用していることに注意してくださいatop。また、改行に を使用しています。次に、呼び出すときにそのベクトルを使用しますlegend

v <- c(
 as.expression(substitute(atop(Qua[0.99]^normal == "", dummy), list(dummy=round(dummy1,4)))),
 as.expression(substitute(atop(Qua[0.95]^normal == "", dummy), list(dummy=round(dummy2,4)))),
 as.expression(substitute(atop(Qua[0.99]^t == "", dummy), list(dummy=round(dummy3,4))))
)
cols <- c("red","black","darkgreen")
legend("topright", legend=v, bty = "n",lwd=2, cex=1, col=cols, text.col=cols, lty=c(1,3,5))

文字の色は で設定しtext.colます。 ここに画像の説明を入力

bquoteではなくの使用に固執したい場合substitute

 v <- c(
  as.expression(bquote(atop(Qua[0.99]^normal == "", .(round(dummy1,4))))),
  as.expression(bquote(atop(Qua[0.95]^normal == "", .(round(dummy2,4))))),
  as.expression(bquote(atop(Qua[0.99]^t == "", .(round(dummy3,4)))))
 )

通常0.99を太字にするには、次boldの式を使用できます。

v <- c(
 as.expression(substitute(atop(Qua[bold(0.99)]^bold(normal) == "", dummy), list(dummy=round(dummy1,4)))),
 as.expression(substitute(atop(Qua[bold(0.95)]^bold(normal) == "", dummy), list(dummy=round(dummy2,4)))),
 as.expression(substitute(atop(Qua[bold(0.99)]^bold(t) == "", dummy), list(dummy=round(dummy3,4))))
)

しかし、0.99は実際にはあまり太字にはなりません。 ここに画像の説明を入力

次を使用して、通常のサイズのテキストで試すことができますtextstyle

v <- c(
 as.expression(substitute(atop(Qua[textstyle(0.99)]^textstyle(normal) == "", dummy), list(dummy=round(dummy1,4)))),
 as.expression(substitute(atop(Qua[textstyle(0.95)]^textstyle(normal) == "", dummy), list(dummy=round(dummy2,4)))),
 as.expression(substitute(atop(Qua[textstyle(0.99)]^textstyle(t) == "", dummy), list(dummy=round(dummy3,4))))
)

これを取得します: ここに画像の説明を入力

于 2013-03-28T13:21:47.557 に答える
5

ここで必要なことがいくつかありますが、主なものは 3 つの式を適切な形式で取得することです。単純cにそれらを一緒にするとうまくいきません。そのために、式のリストを作成し、sapplyそのas.expressionリストに対して関数を作成して「式のベクトル」を取得します。

plotmath 関数を使用しatopて「改行」を取得します。これは引数を重ねて配置します。

0,95私が推測する部分を取得するには0.95、あなたのロケールでは、私のマシン*でリテラルでレイアウト関数を使用して、 と","を並置する必要が0ありました95。これが小数点を書き込むだけの場合、.小数点として使用する他のロケールでは、これは必要ありません。あなたのロケールでは、以下の 2 番目のバージョンを使用できると思われますが、 の[0,99]代わりに記述しますが[0.99]、わかりません。

置くだけなら

bquote(atop(foo_0.99^normal ==, .round(bar, 4)))

エラーが発生するだけです:

> bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
Error: unexpected ',' in "bquote(atop(foo_0.99^normal ==,"

==これは、関数/演算子の右側が欠落しているためです。(現在の行で!) の後には何も==必要ないため、余分なスペースを追加せずに の有効な右側を提供するものを使用する必要があります==。ここではphantom()、プレースホルダーとして機能しますが、スペースを残しません (引数を指定しないため) を使用します。ただし== ""、 の代わり""に を使用することもできますphantom()

線と同じ色のテキストを取得するには、text.col引数を使用します。

これは、すべてのリクエストに対応した完全なものです(ファッションの後):

test <- 10:1
dummy1 <- 0.004323423
dummy2 <- 0.054
dummy3 <- 0.032
plot(test, 1:10)

## list of expressions
exprs <-
  list(bquote(atop(Qua_0 * "," * 99^normal == phantom(), .(round(dummy1, 4)))),
       bquote(atop(Qua_0 * "," * 95^normal == phantom(), .(round(dummy2, 4)))),
       bquote(atop(Qua_0 * "," * 99^t == phantom(), .(round(dummy3, 4)))))
## fudge to get them as an expression vector
exprs <- sapply(exprs, as.expression)

cols <- c("red", "black", "darkgreen")
legend("topright", legend = exprs, bty = "n", lwd = 2, cex = 1, col = cols,
       lty=c(1,3,5), text.col = cols)

LaTeX_を使用して上付き文字を取得しているようです。plotmath では、 が必要[ ]です。また、これはタイポグラフィ的にもあまり良くないことに注意してください --- 凡例のエントリ間には十分なスペースがありませんが、単一のエントリ内の要素間にはいくらかのスペースがあります。これはatop、改行を偽造するために悪用されているためです。y.interspの引数を使用して対処できますlegend。に増やすと、2十分なスペースが得られます。

これを組み合わせて、すべての要件を満たすために次のことを行います。

plot(test, 1:10)

## list of expressions
exprs <-
  list(bquote(atop(Qua[0.99]^normal == phantom(), .(round(dummy1, 4)))),
       bquote(atop(Qua[0.95]^normal == phantom(), .(round(dummy2, 4)))),
       bquote(atop(Qua[0.99]^t == phantom(), .(round(dummy3, 4)))))
## fudge to get them as an expression vector
exprs <- sapply(exprs, as.expression)

cols <- c("red", "black", "darkgreen")
legend("topright", legend = exprs, bty = "n", lwd = 2, cex = 1, col = cols,
       lty=c(1,3,5), text.col = cols, y.intersp = 2)

これにより、次が生成されます。

ここに画像の説明を入力

于 2013-03-28T13:23:52.917 に答える