如何修复在 Linux/Fedora 31 上的 R 中未正确显示的度数符号

gio*_*mai 8 r pango plotmath pangocairo r-sf

我制作的任何地图:

ggplot() + geom_sf()

生成预期的地图,但未正确显示度数符号,如下图所示。

带有错误度数符号的地图一角

这个答案中给出的答案 -地图轴标签中的度数符号不正确- 没有帮助,当我看到不同的标志时,我发布了一个单独的问题。

更改字体无济于事。

我还尝试sf在一个单独的项目中从 Github安装当前版本的(0.9) renv,但结果相同。

我在 Linux 上,Fedora 31。

复制:

library("ggplot2")
library("sf")
nc <- st_read(system.file("shape/nc.shp", package="sf"))

ggplot() +
  geom_sf(data = nc)
Run Code Online (Sandbox Code Playgroud)

2019-03-15 更新

该问题并非特定于 ggplot/geom_sf;正如评论中所建议的,我遇到了同样的问题plot.new(); text(0.5,0.5, bquote(120*degree*N), cex=5) 错误度数符号的附加示例

另外,澄清一下,我没有在?X11(). 如果我在我的终端中运行fc-match Symbol,我会得到:

StandardSymbolsPS.t1:“标准符号 PS”“常规”

更新 2019-03-19

在全新的 Fedora 31 和 Fedora 32 beta 安装中得到确认。可能是 Fedora 的问题。

我尝试使用不同的语言环境(包括例如“en_US.UTF-8”或“German”)和设备(例如cairo_pdf(), cairo_ps()),结果相同。

X11.options() 将“cairo”显示为类型(将其更改为 Xlib,或者 dbcairo 不会更改结果)。

使用TestChars()dww在下面的答案中提出的函数显示如下: 测试

但是,如果我用 knitr 编织到 pdf,我会得到大多数符号,包括°。

从pdf测试

如果我编织到 html,我会得到通常的乱码。

2020-03-20 更新

正如@jpmam1 所建议的,这似乎与 中的回归有关pango,可以通过降级暂时修复pango。然而,降级 pango 会破坏操作系统的其他核心部分,例如nautilus.

我在 Fedora 上打开了一个 bug:https : //bugzilla.redhat.com/show_bug.cgi? id =1815128

jar*_*rot 6

以下是使用在 Fedora 31 VirtualBox VM 上运行的 R (ver3.6.3 2020-02-29) / R Studio (ver1.2.5033) 解决您的问题的两种解决方案:

1) 使用自定义比例插入 unicode 字符以生成正确的符号(包括 N/S 或 E/W,具体取决于您的 long/lat):

#install.packages("ggplot2")
#install.packages("sf")
library("ggplot2")
library("sf")

nc <- st_read(system.file("shape/nc.shp", package="sf"))

ggplot() +
  geom_sf(data = nc) +
  scale_x_continuous(labels = function(x) paste0(x, '\u00B0', "W")) +
  scale_y_continuous(labels = function(x) paste0(x, '\u00B0', "N"))

Run Code Online (Sandbox Code Playgroud)

2)降级pango库。在 Fedora 31 中,pango 升级到 1.44,由于从 Freetype 切换到 HarfBuzz,这影响了默认 R-Studio 字体等位图字体。降级软件包修复了系统范围内特殊字符的呈现。这也应该可以解决 Fedora 32 中的问题(未经测试)。

sudo dnf downgrade --releasever 30 pango-1.43.0-4.fc30.x86_64
Run Code Online (Sandbox Code Playgroud)


gio*_*mai 3

事实证明,这种不当行为是由 R 本身遗留的符号使用引起的。

\n\n

这可能会在 R 本身的上游得到修复:\n https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17748 \n它引用了我收到反馈后为 Fedora 提出的下游问题问题:\n https://bugzilla.redhat.com/show_bug.cgi?id=1815128

\n\n

I\xc3\xb1aki Ucar 已在 R 邮件列表上发布了有效的解决方法:\n https://stat.ethz.ch/pipermail/r-devel/2020-March/079185.html

\n\n

我把它复制在这里供参考:

\n\n
\n
$ sudo dnf install gdouros-symbola-fonts\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后将以下内容添加到 /etc/fonts/local.conf (系统范围)或\n ~/.fonts.conf (仅适用于您的用户):

\n\n
<fontconfig>\n<match target="pattern">\n <test name="family"><string>Symbol</string></test>\n <edit name="family" mode="prepend" binding="same">\n   <string>Symbola</string>\n </edit>\n</match>\n</fontconfig>\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在你应该看到这个:

\n\n
$ fc-match Symbol\nSymbola.ttf: "Symbola" "Regular"\n
Run Code Online (Sandbox Code Playgroud)\n\n

和符号应该正确呈现。

\n
\n\n

再次强调,此解决方案归功于 I\xc3\xb1aki Ucar。

\n\n

感谢所有对此问题提供答案的人,感谢他们在故障排除和促进此过程方面提供的帮助。希望这将在 R 核心本身的上游得到修复。

\n