使用 "expression" 创建带有一些斜体的标签列表,使用数据框中的值
Using "expression" to create list of labels with some italics, using values from a dataframe
我正在尝试创建包含斜体的标签列表。我可以用这样的“表达式”来做到这一点,当我把它们放在一个图上时(通过添加一个图例作为例子,但我会以不同的方式使用它们),一切都很好。
sp.names=c(expression(paste("species ",italic("one")," sp.")),
expression(paste("species ",italic("two")," sp.")))
plot(1:10)
legend("topleft",legend=sp.names)
但我不想直接在代码中指定标签中的单词,而是想从数据框中的单元格中调用它们(因为它们有很多,并且它们会根据我的基础数据而变化)。但是当我尝试指定我想要的数据框单元格时,它没有正确打印标签(见下文)。也许我可以用不同的方式来调用我希望“表达式”函数能够识别的单元格?
df=data.frame(V1=c("species","species","species"),V2=c("one","two","three"))
sp.names=c(expression(paste(df$V1[1],italic(df$V2[1])," sp.")),
expression(paste(df$V1[2],italic(df$V2[2])," sp.")))
plot(1:10)
legend("topleft",legend=sp.names)
使用substitute
,它替换表达式中的变量。
sp.names=c(substitute(V1 ~ italic(V2) ~ "sp.", df[1,]),
substitute(V1 ~ italic(V2) ~ "sp.", df[2,]))
我还删除了不需要的 paste
(在 plotmath 中具有不同的含义)并将其替换为 ~
以提高可读性。
试一试bquote
。
sp.names <- c(bquote(.(df$V1[1])~italic(.(df$V2[1]))~" sp."),
bquote(.(df$V1[2])~italic(.(df$V2[2]))~" sp."))
plot(1:10)
legend("topleft", legend=sp.names)
我正在尝试创建包含斜体的标签列表。我可以用这样的“表达式”来做到这一点,当我把它们放在一个图上时(通过添加一个图例作为例子,但我会以不同的方式使用它们),一切都很好。
sp.names=c(expression(paste("species ",italic("one")," sp.")),
expression(paste("species ",italic("two")," sp.")))
plot(1:10)
legend("topleft",legend=sp.names)
但我不想直接在代码中指定标签中的单词,而是想从数据框中的单元格中调用它们(因为它们有很多,并且它们会根据我的基础数据而变化)。但是当我尝试指定我想要的数据框单元格时,它没有正确打印标签(见下文)。也许我可以用不同的方式来调用我希望“表达式”函数能够识别的单元格?
df=data.frame(V1=c("species","species","species"),V2=c("one","two","three"))
sp.names=c(expression(paste(df$V1[1],italic(df$V2[1])," sp.")),
expression(paste(df$V1[2],italic(df$V2[2])," sp.")))
plot(1:10)
legend("topleft",legend=sp.names)
使用substitute
,它替换表达式中的变量。
sp.names=c(substitute(V1 ~ italic(V2) ~ "sp.", df[1,]),
substitute(V1 ~ italic(V2) ~ "sp.", df[2,]))
我还删除了不需要的 paste
(在 plotmath 中具有不同的含义)并将其替换为 ~
以提高可读性。
试一试bquote
。
sp.names <- c(bquote(.(df$V1[1])~italic(.(df$V2[1]))~" sp."),
bquote(.(df$V1[2])~italic(.(df$V2[2]))~" sp."))
plot(1:10)
legend("topleft", legend=sp.names)