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

标签 r sf pango plotmath pangocairo

我制作的任何 map :

ggplot() + geom_sf()



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

Corner of map with wrong degree sign

此答案中给出的答案是关于 SO - degree symbol incorrect in map axis labels - 没有帮助,当我看到不同的标志时,我发布了一个单独的问题。

更改字体无济于事。

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

我在 Linux 上,Fedora 31。

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

ggplot() +
  geom_sf(data = nc)

2019-03-15 更新

该问题并非特定于 ggplot/geom_sf;正如评论中所建议的,我遇到了与 plot.new(); text(0.5,0.5, bquote(120*degree*N), cex=5) 相同的问题
additional example of wrong degree sign

另外,澄清一下,我没有在 ?X11() 的帮助中详细说明与 Wine 相关的问题。 .如果我在终端中运行,fc-match Symbol ,我得到:

StandardSymbolsPS.t1: "Standard Symbols PS" "Regular"



更新 2019-03-19

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

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

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

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

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

test from pdf

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

2020-03-20 更新

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

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

最佳答案

以下是使用在 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"))


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

关于r - 如何修复在 Linux/Fedora 31 上的 R 中未正确显示的度数符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60656445/

相关文章:

r - 线性回归系数信息作为数据框或矩阵

r - 当此值等于 1 时,将下 n 个值设置为零

r - 使用 sf 对象自定义 ggplot2 中的图例

r - 计算数据集中因子水平的相对频率

r - 努力理解 Q1 计算

r - 在 R : "Error: Object not found" 中使用 sf 在世界地图上对数据进行子集化和绘图

r - 如何获取带有轮廓的相交线的坐标 - R

c - Pango 和 FreeType——不渲染文本,只渲染奇怪的像素

colors - 将 8 位颜色分量转换为 16 位颜色分量

php - 在 PHP Imagick API 中使用 Pango