如何将表达式传递给 ggplot 中的 geom_text 标签? (继续)
How to pass an expression to a geom_text label in ggplot? (Continued)
这是我的 的后续跟进,内容是关于如何将带下标的表达式传递给 ggplot 中的 geom_text 标签。
Duck 在 geom_text()
命令中使用 parse = T
提供了一个很好的解决方案。但是,我现在 运行 遇到了一个问题,因为我希望将表达式传递给的变量包含其他使用 parse = T
无法读取的内容
这是我当前的代码(再次感谢 Duck 提供的解决方案):
library(ggplot2)
library(tidyverse)
#Data
my_exp <- as.character(expression('my_exp'[s][u][b]))
my_data <-
data.frame(
var_1 = c("9R", "14M", "17C"),
var_2 = c(1, 2, 3),stringsAsFactors = F
)
#Mutate
my_data$label <- ifelse(my_data$var_1=='9R',my_exp,my_data$var_1)
#Plot
my_data %>%
ggplot(aes(x = var_1, y = var_2))+
geom_text(aes(label = label),parse = T)
这是我尝试渲染 ggplot 时出现的错误输出:
> library(ggplot2)
> library(tidyverse)
> #Data
> my_exp <- as.character(expression('my_exp'[s][u][b]))
> my_data <-
+ data.frame(
+ var_1 = c("9R", "14M", "17C"),
+ var_2 = c(1, 2, 3),stringsAsFactors = F
+ )
> #Mutate
> my_data$label <- ifelse(my_data$var_1=='9R',my_exp,my_data$var_1)
> #Plot
> my_data %>%
+ ggplot(aes(x = var_1, y = var_2))+
+ geom_text(aes(label = label),parse = T)
Error in parse(text = text[[i]]) : <text>:1:3: unexpected symbol
1: 14M
^
>
看来 R 很难读取我没有传递表达式的单元格。有没有办法让 R 只解析相关的单元格?
谢谢!
也许这可能不是最佳选择,但您可以为您的表情创建一个标签,为您的经典文本创建另一个标签。这里的代码:
library(ggplot2)
library(tidyverse)
#Data
my_exp <- as.character(expression('my_exp'[s][u][b]))
my_data <-
data.frame(
var_1 = c("9R", "14M", "17C"),
var_2 = c(1, 2, 3),stringsAsFactors = F
)
#Mutate label 1
my_data$label <- ifelse(my_data$var_1=='9R',my_exp,NA)
my_data$label2 <- ifelse(my_data$var_1=='9R',NA,my_data$var_1)
#Plot
my_data %>%
ggplot(aes(x = var_1, y = var_2))+
geom_text(aes(label = label),parse = T)+
geom_text(aes(label = label2))
输出:
使用 geom_text()
两次就可以破解剧情。
作为替代方案,您可以使用 ggtext 包中的 geom_richtext()
并使用 <sup>...</sup>
或 <sub>...</sub>
.
创建上标或下标
library(ggplot2)
library(ggtext)
#Data
my_exp <- "my_exp<sub>sub</sub>"
my_data <-
data.frame(
var_1 = c("9R", "14M", "17C"),
var_2 = c(1, 2, 3), stringsAsFactors = F
)
#Mutate
my_data$label <- ifelse(my_data$var_1=='9R', my_exp, my_data$var_1)
#Plot
ggplot(my_data, aes(x = var_1, y = var_2)) +
geom_richtext(
aes(label = label),
# customization to remove background and border around labels
fill = NA,
label.colour = NA
)
由 reprex package (v0.3.0)
于 2020-09-09 创建
这是我的
Duck 在 geom_text()
命令中使用 parse = T
提供了一个很好的解决方案。但是,我现在 运行 遇到了一个问题,因为我希望将表达式传递给的变量包含其他使用 parse = T
这是我当前的代码(再次感谢 Duck 提供的解决方案):
library(ggplot2)
library(tidyverse)
#Data
my_exp <- as.character(expression('my_exp'[s][u][b]))
my_data <-
data.frame(
var_1 = c("9R", "14M", "17C"),
var_2 = c(1, 2, 3),stringsAsFactors = F
)
#Mutate
my_data$label <- ifelse(my_data$var_1=='9R',my_exp,my_data$var_1)
#Plot
my_data %>%
ggplot(aes(x = var_1, y = var_2))+
geom_text(aes(label = label),parse = T)
这是我尝试渲染 ggplot 时出现的错误输出:
> library(ggplot2)
> library(tidyverse)
> #Data
> my_exp <- as.character(expression('my_exp'[s][u][b]))
> my_data <-
+ data.frame(
+ var_1 = c("9R", "14M", "17C"),
+ var_2 = c(1, 2, 3),stringsAsFactors = F
+ )
> #Mutate
> my_data$label <- ifelse(my_data$var_1=='9R',my_exp,my_data$var_1)
> #Plot
> my_data %>%
+ ggplot(aes(x = var_1, y = var_2))+
+ geom_text(aes(label = label),parse = T)
Error in parse(text = text[[i]]) : <text>:1:3: unexpected symbol
1: 14M
^
>
看来 R 很难读取我没有传递表达式的单元格。有没有办法让 R 只解析相关的单元格?
谢谢!
也许这可能不是最佳选择,但您可以为您的表情创建一个标签,为您的经典文本创建另一个标签。这里的代码:
library(ggplot2)
library(tidyverse)
#Data
my_exp <- as.character(expression('my_exp'[s][u][b]))
my_data <-
data.frame(
var_1 = c("9R", "14M", "17C"),
var_2 = c(1, 2, 3),stringsAsFactors = F
)
#Mutate label 1
my_data$label <- ifelse(my_data$var_1=='9R',my_exp,NA)
my_data$label2 <- ifelse(my_data$var_1=='9R',NA,my_data$var_1)
#Plot
my_data %>%
ggplot(aes(x = var_1, y = var_2))+
geom_text(aes(label = label),parse = T)+
geom_text(aes(label = label2))
输出:
使用 geom_text()
两次就可以破解剧情。
作为替代方案,您可以使用 ggtext 包中的 geom_richtext()
并使用 <sup>...</sup>
或 <sub>...</sub>
.
library(ggplot2)
library(ggtext)
#Data
my_exp <- "my_exp<sub>sub</sub>"
my_data <-
data.frame(
var_1 = c("9R", "14M", "17C"),
var_2 = c(1, 2, 3), stringsAsFactors = F
)
#Mutate
my_data$label <- ifelse(my_data$var_1=='9R', my_exp, my_data$var_1)
#Plot
ggplot(my_data, aes(x = var_1, y = var_2)) +
geom_richtext(
aes(label = label),
# customization to remove background and border around labels
fill = NA,
label.colour = NA
)
由 reprex package (v0.3.0)
于 2020-09-09 创建