r - ggplot geom_point 形状(和 pdf)中未显示 unicode 符号
问题描述
我正在尝试在 ggplot 中使用 unicode 符号作为 geom_point 形状。它主要按预期工作,但一个符号(▶,“\u25b6”)没有显示在 RStudio 图中,并且在 pdf 中没有任何符号显示。这是我的示例(数据显示听音乐期间的用户输入):
library(tidyverse)
library(ggplot2)
library(Cairo)
event_levels <- c("open", "play", "q", "pause", "ff", "exit")
# 1st try: add the symbols directly
event_shapes1 <- c("⏏️", "▶", "❓", "⏸️", "⏩", "⏹️")
# 2nd try: add unicode
event_shapes2 <- c("\u23cf", "\u25b6", "\u2753", "\u23f8", "\u23e9", "\u23f9")
# 3rd try: add unicode with ucap letters
event_shapes3 <- c("\U23CF", "\U25B6", "\U2753", "\U23F8", "\U23E9", "\U23F9")
event_colours <- c("black", "green", "red", "orange", "blue", "black")
data <- tibble(event = factor(c("open", "play", "q", "play", "q", "play", "pause", "play", "ff", "exit"), levels = event_levels),
time = seq(0, 100, length.out = length(event)),
pos = c(0, 0, 50, 50, 100, 100, 150, 150, 200, 300))
p <- ggplot(data) +
geom_line(mapping = aes(x = time, y = pos), alpha = 0.5) +
geom_point(mapping = aes(x = time, y = pos, color = event, shape = event), size = 6) +
scale_shape_manual(values = event_shapes2) +
# event_shapes1 doesn't work, no difference between event_shapes2 and event_shapes3
scale_color_manual(values = event_colours)
ggsave("test.pdf", plot = p, device=cairo_pdf)
我可能做错了什么,或者可能是系统特定的故障(Win 10)。我尝试在-line (以及许多其他字体系列)中使用library(extrafont)
and par(family = "Consolas")
,但没有成功。symbolfamily="Consolas"
ggsave
我还尝试使用以下符号打印符号geom_text
并将符号添加到tibble
如下所示:
data <- data %>%
mutate(event_shape = case_when(
event == "open" ~ "⏏️",
event == "play"~ "▶",
event == "q" ~ "❓",
event == "pause" ~ "⏸️",
event == "ff" ~ "⏩",
event == "exit" ~ "⏹️",
), .after = event)
p <- ggplot(data) +
geom_line(mapping = aes(x = time, y = pos), alpha = 0.5) +
geom_text(mapping = aes(x = time, y = pos, label = event_shape), size = 6)
但仍然没有成功。我能做些什么?我不想每次都下载符号,也许我可以在本地将符号保存为 png 或 svg,然后将它们添加到图表中?或者可能是不那么复杂的东西?
解决方案
该emojifont
软件包解决了这个问题。
这是一个例子:
library(emojifont)
library(ggplot2)
library(Cairo)
df <- data.frame(
x=1,
y=1,
text="\u25b6"
)
p <- ggplot(df, aes(x=x,y=y, label=text)) +
geom_text()
ggsave('test.pdf', p)
推荐阅读
- javascript - 使用 MongoDB 和 Nodejs 创建嵌套的子文档/子元素
- xml - 如何使用 PowerShell 从 XML 文件中获取退出代码?
- swift - 如何在 Xcode swift 中以编程方式更改 UIBarButtunItem 功能
- postfix-mta - 如何将 Postfix 配置为仅中继来自特定域的电子邮件?
- python-3.x - 不止一种方法对硒元素进行定位
- istio - 带有 Keycloak 的 Istio OAuth2
- java - Springboot依赖注入在休眠实体中失败
- android - FireBase 卡在 Android 的“运行您的应用程序以验证安装”上
- java - 如何使用 Sikuli 终止应用程序
- php - Laravel 在 x 小时分钟秒后延迟队列作业调度