R中的上标图例文本

Posted

技术标签:

【中文标题】R中的上标图例文本【英文标题】:Superscript Legend Text in R 【发布时间】:2020-04-02 17:39:24 【问题描述】:

我目前正在尝试在 R 中添加类似于 Latex 的图例文本。我有诸如"xx", "xxx", "yy", and "zz" 之类的变量,我想知道是否可以将这些变量自动转换为上标,例如Latex 中的$x^2$。我知道 ggplot 的 expression(paste0("x"^"2")),但不清楚如何实现它或自动更改文本。

matrix <- matrix(rexp(200, rate=.1), ncol=20)
df <- data.frame(matrix)
variables <- c("x","y","z","xx","xy","yy","xz","yz","zz","xxx")

df$variables <- variables

new.df <- melt(df, id.vars="variables")

ggplot(new.df, aes(x = variable, y = value, col=variables, group = variables))+
  geom_point()+
  geom_line()

【问题讨论】:

【参考方案1】:

你仍然必须使用 expression()

编辑:您可以使用 rlang 的 parse_exprs() 和 eval 自动将您的变量转换为表达式:



#variables_ex <- rep(expression(paste(x^x[y])),10)
##EDIT: universal solution:

library(rlang)

variables <- c("x","y","z","xx","xy","yy","xz","yz","zz","xxx")

exlabel<-paste(variables,"^x[y]",sep="")


ggplot(new.df, aes(x = variable, y = value, col=variables, group = variables))+
  geom_point()+
  geom_line()+ labs(x = variables_ex)+
  scale_color_discrete(name = "Superlegend", labels= eval(parse_exprs(exlabel)))+
  theme( legend.text = element_text(color = "red"))

【讨论】:

是否可以应用循环或不同的函数来自动将expression(paste()) 用于熔化数据名或原始数据帧中的变量? 当然,为什么不呢,可能是 lapply( vector, paste ) 和另一个 lapply( vector, expression 该方法似乎为每个变量提供了输出expression(X[[i]], ...)。我试过as.expression 但这似乎并不能提供我想要的东西。最终, as.expression 给出了 expression("xx") 这不是我想要的,并且引号需要删除。 我正在尝试一个 for 循环,但表达式没有按预期运行 好的,我点了它并更新了答案,我希望它清楚,否则请随时回来

以上是关于R中的上标图例文本的主要内容,如果未能解决你的问题,请参考以下文章

如何将上标添加到R中的复杂轴标签

如何理解哪个图例是哪个图例并在 R 的 ggplot 中删除其中一个?

Matlab 在地图上标注点

在 wpf 中的格式化文本中设置上标和下标

如何在鼠标焦点上标记 DatePicker 和 Timepicker 中的所有文本

如何将上标字符转换为 C# 字符串中的普通文本