Use sub-/superscript and special characters in legend texts of R plots

谁说胖子不能爱 提交于 2019-12-09 10:43:57

问题


I generate a plot for multiple datasets. Each of the datasets should get it's own legend, which might contain greek letters, plotmath symbols or sub and superscrition. I'd like to generate the legend-texts in a loop.

Bquote works fine, if there is only one legend text. If I try to add additinal legend texts, the plotmath-commads get lost,...

x <- 0:10
y1 = x * x
y2 = x * 10

plot (1,1, type="n", xlab=bquote(Omega), ylab="Y", las=1, xlim=range(x), ylim=range(y1, y2))
lines(x, y1, col=1, pch=1, type="b")
lines(x, y2, col=2, pch=2, type="b")

# generate legend texts (in a loop)
legend_texts = c(
  bquote(Omega^2)
  , bquote(Omega%*%10)
)
# Using a single bquote works fine:
#legend_texts = bquote(Omega^2)
#legend_texts = bquote(Omega%*%10)

legend(
  "topleft"
  , legend = legend_texts
  , col = c(1:2)
  , pch = c(1:2)
  , lty = 1
  )

回答1:


Change "legend_texts" to:

# generate legend texts (in a loop)
legend_texts = c(
  as.expression(bquote(Omega^2))
  , as.expression(bquote(Omega%*%10))
)

From the help page for ?legend, the "legend" argument is described as:

a character or expression vector. of length ≥ 1 to appear in the legend. Other objects will be coerced by as.graphicsAnnot.

Output:




回答2:


Try this:

 legend_texts = expression(
   Omega^2, Omega*10)

 legend(
   "topleft"
   , legend = legend_texts
   , col = c(1:2)
   , pch = c(1:2)
   , lty = 1
   )

I could not tell if you wanted Omega^10 or Omega*10 or Omega%*%10 , but they all would produce acceptable plotmath expressions.



来源:https://stackoverflow.com/questions/15288900/use-sub-superscript-and-special-characters-in-legend-texts-of-r-plots

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!