首页 > 解决方案 > ggplot shape = Unicode(例如像“\u2198”或LaTeX \searrow这样的箭头)?

问题描述

我想使用 Unicode 形状ggplot2 geom_point()(特别是箭头,如 ↘、Unicode "\u2198" 或 LaTeX \searrow),如 中 shape = "\u2198",它们不在默认字体中。在这篇未答复的帖子中,@Laserhedvig 评论道“似乎问题出在字体上。显然,基本默认字体不包含对这些特定字形的支持。现在,如何更改 geom_point() 的 shape 参数的字体?”

此解决方案用于 Unicode axes.texttheme(axis.text.x = element_text(family = "FreeSerif"))并且此解决方案适用theme(text=element_text(size=16, family="Comic Sans MS"))于所有人text,但我该怎么做shape呢?

  1. 是否有使用 Unicode 的通用解决方案shape?(我必须以某种方式使用cairo和/或字体family参数吗?)
  2. 如果没有,是否还有其他一组箭头形状?(我对箭头形状和字形的搜索,包括在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")

shape = "\u2198" (即 "↘") 不起作用

编辑:感谢 djangodude 对 ggplot 字体使用的评论,我找到了允许使用不同字体的family参数。geom_text因此,Unicode“形状”可以绘制为带有geom_text. 但是,图例固定为 "ageom_text " 。并且主题只控制非数据显示,因此该参数不适用于.base_familyshape

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") 

geom_text 绘制 unicode,但不在图例中

看来这个shape论点确实是正确的方法,对吧?

我尝试设置Sys.setenv(LANG = "en_US.UTF-8")Sys.setenv(LANG = "Unicode")没有效果,但也许一些全局语言设置会影响shape

非常感谢您的帮助!

注意:这些 Unicode骷髅和交叉骨以及半填充点的解决方案没有图例,如果没有正确的字体,将无法工作:

要获得正确的字体:

  1. 查找包含您要查找的 Unicode 字符的已安装字体。我发现这些说明很有帮助。

  2. 将安装的字体导入 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

标签: rggplot2unicodefontsshapes

解决方案


使用shape="\u2198"而不是\u8600. 使用\u符号指定字符时,该值需要为十六进制。8600 是 Unicode 字符右下箭头的十进制值;十六进制值为 2198。


推荐阅读