r - ggplot shape = Unicode(例如像“\u2198”或LaTeX \searrow这样的箭头)?
问题描述
我想使用 Unicode 形状ggplot2
geom_point()
(特别是箭头,如 ↘、Unicode "\u2198" 或 LaTeX \searrow),如 中 shape = "\u2198"
,它们不在默认字体中。在这篇未答复的帖子中,@Laserhedvig 评论道“似乎问题出在字体上。显然,基本默认字体不包含对这些特定字形的支持。现在,如何更改 geom_point() 的 shape 参数的字体?”
此解决方案用于 Unicode axes.text
,theme(axis.text.x = element_text(family = "FreeSerif"))
并且此解决方案适用theme(text=element_text(size=16, family="Comic Sans MS"))
于所有人text
,但我该怎么做shape
呢?
- 是否有使用 Unicode 的通用解决方案
shape
?(我必须以某种方式使用cairo
和/或字体family
参数吗?) - 如果没有,是否还有其他一组箭头形状?(我对箭头形状和字形的搜索,包括在
scale_shape
文档中的搜索都是空的。)
就我而言,我需要一个 ggplot2 层来显示跨离散类别的时间点变化方向的定性预测。
一个例子:
library(dplyr)
library(ggplot2)
d <- tibble(year = c(1, 1, 2, 2),
policy = rep( c('policy 1', 'policy 2'), 2),
prediction = c(NA, 'increase', 'decrease', NA),
predictionUnicode = c(NA, '\u2197', '\u2198', NA))
ggplot(d) +
geom_point(aes(x = year, y = policy, color = prediction), shape = "\u2198")
编辑:感谢 djangodude 对 ggplot 字体使用的评论,我找到了允许使用不同字体的family
参数。geom_text
因此,Unicode“形状”可以绘制为带有geom_text
. 但是,图例固定为 "ageom_text
" 。并且主题只控制非数据显示,因此该参数不适用于.base_family
shape
ggplot(d) +
geom_tile( aes(x = year, y = policy), color = "black", fill = "white") +
# geom_point does not allow new fonts?
geom_point(aes(x = year, y = policy,
color = prediction), shape = "\u2198") +
# geom_text does allow new fonts, but the legend text is fixed to "a"
geom_text(aes(x = year, y= policy,
color = prediction,
label = predictionUnicode),
family = "Calibri") +
scale_x_continuous(breaks = c(1,2)) +
theme_gray(base_family = "Calibri")
看来这个shape
论点确实是正确的方法,对吧?
我尝试设置Sys.setenv(LANG = "en_US.UTF-8")
但Sys.setenv(LANG = "Unicode")
没有效果,但也许一些全局语言设置会影响shape
?
非常感谢您的帮助!
注意:这些 Unicode骷髅和交叉骨以及半填充点的解决方案没有图例,如果没有正确的字体,将无法工作:
要获得正确的字体:
查找包含您要查找的 Unicode 字符的已安装字体。我发现这些说明很有帮助。
将安装的字体导入 R
library(extrafont)
font_import()
fonts()
sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.3
解决方案
使用shape="\u2198"
而不是\u8600
. 使用\u
符号指定字符时,该值需要为十六进制。8600 是 Unicode 字符右下箭头的十进制值;十六进制值为 2198。
推荐阅读
- python - 将数据框中的日期时间保存为 csv 时保持时区
- azure-active-directory - Ms Teams OnlineMeeting 匿名用户加入认证
- java - 将 XML 文档转换为 ArrayList 时的 NPE
- docker - Windows 容器的代理设置
- api - 使用 API 将数据拉入 PowerBI
- vue.js - Vercel 和 Nuxt 部署上的 FUNCTION_INVOCATION_FAILED 错误
- java - 将反序列化的 java 对象转换为 JSON
- java - 如果套件在 BeforeSuite 中失败,则显示失败
- visual-studio-code - 搜索功能是否需要输入键才能执行?
- asp.net-core - 无法使用 Dapr 调用另一个服务