我有一个 R 例程,它可以从大量数据中创建许多图。每个图都标有描述所绘制点集的详细信息的标题。不幸的是,如果我使用粘贴来组合复杂的标签,则无法在文本中使用下标。结果很丑。这是使用来自 R 的数据的代码的简化版本。标题显示了我目前使用的技术,没有下标。改进版本的尝试放在 x 轴或绘图上。

library(ggplot2)
x1 = 1
x2 = 2
list <- c(1:4)
tle <- paste("VGM = ", as.character(list[1]),
         "V, VDM = ", as.character(list[2]),
         "V, VGF = ", as.character(list[3]),
         "V, VDF = ", as.character(list[4]),
         "V", sep="")
p <- ggplot(mtcars, aes(x=wt, y=mpg)) +
  labs(title=tle) +
  geom_point()
p
p + xlab(expression(V[DM]))  #works fine
p + xlab(expression(paste(V[DM], "= 3"))) # works fine

# now we would like to use a variable to provide the number

p + xlab(expression(paste(V[DM], "=", x1))) # Just displays "x1", not value of x1
p + xlab(expression(paste(V[DM], "=",
                      as.character(x1)))) # NO
p + xlab(expression(paste(V[DM], "=",
                      as.character(as.number(x1))))) # NO
my.xlab1 <- bquote(V[DM] == .(x1))
p + xlab(my.xlab1) # We can see the success here

# A single variable at the end of the expression works
# What if you wanted to display two variables?

my.xlab2 <- bquote(V[GM] == .(x2))
my.xlab3 <- paste(my.xlab1, my.xlab2)
p + xlab(my.xlab3) # doesn't work

# Apparently the expressions cannot be pasted together. Try another approach.
# Place the two expressions separately on the plot. They no longer need to be
# pasted together. It would look better, anyway. Would it work?

p + annotate("text", x=4, y=30, label="Annotate_text", parse=TRUE)
# This is the idea
# p + annotate("text", x=4, y=30, label=bquote(V[DM] == .(x1)), parse=TRUE)
# This is a disaster
# RStudio stops the process with a question mark placed on the console. Appears that
# more input is being requested?
p + geom_text(x=4, y=30, label="Geom_text") # works
p + geom_text(x=4, y=30, label=my.xlab1) # does not accept variables.

我已经包括了描述每次尝试引起的问题的评论。理想情况下,信息应该作为注释而不是标题放置在情节上,但我找不到办法做到这一点。使用下标将字符转换为表达式,似乎有一长串处理字符但不处理表达式的函数。

最佳答案

如果您想将两个表达式“粘贴”在一起,则需要一些“运算符”加入它们。表达式确实没有粘贴方法,但有一些方法可以将它们组合在一起。首先,显然您可以使用一个 bquote() 将两个变量放在一起。任何一个

my.xlab3 <- bquote(V[DM] == .(x1)~ V[GM] == .(x2))
my.xlab3 <- bquote(list(V[DM] == .(x1), V[GM] == .(x2)))

会工作。第一个在它们之间放置一个空格,第二个在它们之间放置一个逗号。但是如果你想单独构建它们,你可以将它们与另一轮 bquote 结合起来。所以上面两个表达式的等价构建方法是
my.xlab3 <- bquote(.(my.xlab1) ~ .(my.xlab2))
my.xlab3 <- bquote(list(.(my.xlab1), .(my.xlab2)))

所有这些都应该可以设置您的 xlab() 值。

现在,如果您还想让注释起作用,您可以“取消解析”您的表达式,然后让 R 为您“重新解析”它,您应该一切就绪。观察
p + annotate("text", x=4, y=30, label=deparse(my.xlab3), parse=TRUE)

关于r - 带有下标和变量源的标签或注释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24332757/

10-12 13:58