创建混合斜体和普通字体的轴值

我正在尝试创建一个图,其中轴值是类别名称,其中名称是斜体,后面是一些文本和括号内的数字.每个轴值的类别名称和编号都不同.例如,我会有“狗(宠物1)”,“猫(宠物2)”.我已经查看了许多其他示例,这些示例用于轴的标签,但不是轴的标签参数.我有点卡住了……

par(mar=c(5,8,1,1))
plot(NA, xlim=c(0,5), ylim=c(1,5), ylab="", xlab="", axes=F)
axis(1)
pet <- c("Dog", "Cat", "Goldfish", "Dog", "Rabbit")
number <- 1:5
formatted <- paste("italic(", pet, ")~(Pet ", number, ")", sep="")
axis(2, labels=sapply(formatted, as.expression), at=1:5, las=2)

我希望我很接近,因为得到的绘图在正确的位置具有mathplot语法(例如斜体(狗)〜(宠物1)),但它无法正确渲染.

当我没有拨打电话时,它会抱怨标签数量和at值之间存在不匹配.

当我做轴(2,标签=解析(文本=格式化),at = 1:5,las = 2)然后我得到

Error in parse(text = formatted) : 
  <text>:1:18: unexpected numeric constant
1: italic(Dog)~(Pet 1
                     ^

建议?

最佳答案 更改格式化为列表并使用bquote.然后,您可以评估do.call上的表达式列表.

par(mar=c(5,8,1,1))
plot(NA, xlim=c(0,5), ylim=c(1,5), ylab="", xlab="", axes=F)
axis(1)
pet <- c("Dog", "Cat", "Goldfish", "Dog", "Rabbit")
number <- 1:5
formatted <- lapply(1:5, function(i) bquote(paste(italic(.(pet[i]))~"(Pet", .(number[i]), ")", sep="")))
axis(2, labels=do.call(expression, formatted), at=1:5, las=2)

另一个问题可能是您不需要粘贴中表达式函数调用(斜体)周围的引号.

点赞