是否可以将删除线添加到某些geom_text
/ geom_text_repel
标签中?
This问题提到您可以使用以下内容 italicise 标签:
library("ggplot2")
library("ggrepel")
df <- data.frame(
x = c(1,2),
y = c(2,4),
lab = c("italic('Italic Text')", "Normal"))
ggplot(df, aes(x, y, label = lab)) +
geom_point() +
geom_text_repel(parse = T)
但是,我一直无法使用相同的方法来获取删除线文字。
df$lab = c("strike('Strikethrough Text')", "Normal")
ggplot(df, aes(x, y, label = lab)) +
geom_point() +
geom_text_repel(parse = T)
答案 0 :(得分:1)
如何使用 Unicode 长击覆盖?
R Script
# Long strikethru test
# Unicode Character 'COMBINING LONG STROKE OVERLAY' (U+0336)
library("tidyverse")
# Keep 30 first rows in the mtcars natively available dataset
data <- head(mtcars, 30)
name <- "Strikethrough"
name_strk <- str_replace_all(name, "(?<=.)", "\u0336")
# Add one annotation
ggplot(data, aes(x=wt, y=mpg)) +
geom_point() + # Show dots
geom_label(
label= name_strk,
x=4.1,
y=20,
label.padding = unit(0.55, "lines"), # Rectangle size around label
label.size = 0.35,
color = "black",
size = 4,
fill="white"
)
答案 1 :(得分:0)
如评论中所述,plotmath
无法处理删除线。但是,我们可以使用phantom
和underline
做一些技巧。
library(tidyverse)
df <- data.frame(
y = c(1, 2),
lab = c("italic('Italic Text')", "Strikethrough"),
do_strike = c(FALSE, TRUE)
)
wrap_strike
接收文本并将其包装在phantom
中,使其不可见。对于删除线文本,它添加了underline
。
wrap_strike <- function(text, do_strike) {
text <- glue::glue("phantom({text})")
ifelse(do_strike, glue::glue("underline({text})"), text)
}
如果我们微调新文本的y
位置,则下划线会成为删除线。
ggplot(df, aes(1, y, label = lab)) +
geom_point() +
geom_text(parse = TRUE, hjust = 0) +
geom_text(
data = mutate(df, lab = wrap_strike(lab, do_strike)),
parse = TRUE,
hjust = 0,
vjust = 0.1
)