在 R 中的箱线图中将字符向量中的值显示为斜体标签
Displaying values from a character vector as italic labels in boxplot in R
我想为箱线图名称使用字符向量,如何才能将它们显示为斜体?
# 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)
但这似乎没有被解释为表达式。
感谢您的帮助。
我想我设法获得了想要的结果,但老实说,我不太确定它为什么有效,因此我不确定这个解决方案是否最佳:
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)))
创建以下函数并按所示使用它:
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))
给出:
另一个简单的解决方案是使用 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)
我想为箱线图名称使用字符向量,如何才能将它们显示为斜体?
# 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)
但这似乎没有被解释为表达式。
感谢您的帮助。
我想我设法获得了想要的结果,但老实说,我不太确定它为什么有效,因此我不确定这个解决方案是否最佳:
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)))
创建以下函数并按所示使用它:
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))
给出:
另一个简单的解决方案是使用 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)