1

boxplot の名前に文字ベクトルを使用したいのですが、これらを斜体で表示するにはどうすればよいですか?

# get some data
x <- rnorm(1000)

# I want to get this:
labels <- c(expression(italic("One"), italic("Two")))
labels

boxplot(split(x, cut(x,breaks = c(-Inf, 0, Inf))), names = labels)

ただし、次のような文字ベクトルを使用する

sNames <- c("One", "Two")

試してみましbquote()expression()...

labels <- bquote(expression(italic(.(sNames))))
labels # but this is length 1, not 2

...そしてsapply()

labels <- sapply(sNames, function(x) bquote(expression(italic(.(x)))))
labels

boxplot(split(x, cut(x,breaks = c(-Inf, 0, Inf))), names = labels)

しかし、これは表現として解釈されないようです。

助けてくれてありがとう。

4

3 に答える 3

4

次の関数を作成し、次のように使用します。

make.italic <- function(x) as.expression(lapply(x, function(y) bquote(italic(.(y)))))

boxplot(split(x, cut(x,breaks = c(-Inf, 0, Inf))), names = make.italic(sNames))

与える:

スクリーンショット

于 2015-04-29T12:19:56.570 に答える
3

別の簡単な解決策は、par() を使用して軸のフォントを変更することです。

df <- data.frame(x = rnorm(1000), labels = c(rep("One", 500), rep("Two", 500)))
par(font.axis = 3) # change font of the axis to italic
boxplot(x ~ labels, data = df, yaxt = "n")
par(font.axis = 1) # return to normal font (plain text)
axis(side = 2)
于 2016-03-31T12:35:43.357 に答える
1

望ましい結果を得ることができたと思いますが、正直なところ、なぜそれが機能するのかよくわからないため、このソリューションが最適かどうかはわかりません。

x <- list(a=1:10, b=1:10)
foo <- Vectorize(function(u) eval(parse(text=sprintf("expression(italic(%s))", u))))
boxplot(x, names=foo(names(x)))

結果のラベル

于 2015-04-29T12:18:49.960 に答える