如何将一个表达式传递给ggplot中的geom_text标签?

6

我试图将带有下标的表达式传递给单个geom_text()标签以在ggplot中显示。这是我现在的代码:

my_exp <- expression('my_exp'[s][u][b])

my_data <- 
  data.frame(
    var_1 = c("a", "b", "c"),
    var_2 = c(1, 2, 3)
  )

my_data %>%
  ggplot(aes(x = var_1, y = var_2))+
  geom_text(aes(label = var_1))

这里是生成的图表:

[这里是生成的图表][1].

我的目标是用my_exp指定的表达式替换"a"的值,然后让geom_text()将该值作为表达式进行评估,从而在ggplot上显示下标。

这里的一些答案(https://dev59.com/GW435IYBdhLWcg3wpx2x)可能会有所帮助。 - camille
1个回答

6
我建议这种方法。你可以为标签构建另一个变量,然后启用parse=T选项从geom_text()以便拥有所需的图表。以下是代码:
library(ggplot2)
library(tidyverse)
#Data
my_exp <- as.character(expression('my_exp'[s][u][b]))

my_data <- 
  data.frame(
    var_1 = c("a", "b", "c"),
    var_2 = c(1, 2, 3),stringsAsFactors = F
  )
#Mutate
my_data$label <- ifelse(my_data$var_1=='a',my_exp,my_data$var_1)
#Plot
my_data %>%
  ggplot(aes(x = var_1, y = var_2))+
  geom_text(aes(label = label),parse = T)

输出:

在此输入图片描述

更新:如果标签存在问题,这是一个代码示例:

#Label
my_exp <- "14~M~my_exp[s][u][b]"
#Code
my_data <- 
  data.frame(
    var_1 = c("a", "b", "c"),
    var_2 = c(1, 2, 3),stringsAsFactors = F
  )
#Mutate
my_data$label <- ifelse(my_data$var_1=='a',my_exp,my_data$var_1)
#Plot
my_data %>%
  ggplot(aes(x = var_1, y = var_2))+
  geom_text(aes(label = label),parse = T)

输出:

输入图像描述


1
请告诉我发生了什么事情! - Duck
@RebGray 你好。所有的标签都是字符格式吗? - Duck
@RebGray 你好,Reb。我已经添加了一个更新,使用了你在评论中提到的数字。请检查并告诉我是否有效 :) - Duck
嗨 - 我发布了一个后续问题,因为我意识到在评论中发布代码可能不是一个好的做法。我也会寻找你的更新 - 谢谢! - Reb Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接