你们中的一些人可能已经看过我关于这个主题的博客文章,在我想要帮助一个朋友在图表上生成半满的圆圈之后我编写了以下代码:
TestUnicode <- function(start="25a0", end="25ff", ...)
{
nstart <- as.hexmode(start)
nend <- as.hexmode(end)
r <- nstart:nend
s <- ceiling(sqrt(length(r)))
par(pty="s")
plot(c(-1,(s)), c(-1,(s)), type="n", xlab="", ylab="",
xaxs="i", yaxs="i")
grid(s+1, s+1, lty=1)
for(i in seq(r)) {
try(points(i%%s, i%/%s, pch=-1*r[i],...))
}
}
TestUnicode(9500,9900)
Run Code Online (Sandbox Code Playgroud)
这是有效的(即产生一个几乎完整的酷dingbatty符号网格):
它没有不同程度(即产生部分或完全填充点或空矩形的网格),无论是静默还是警告:
例如,尝试所有可用的PDF字体系列:
flist <- c("AvantGarde", "Bookman","Courier", "Helvetica", "Helvetica-Narrow",
"NewCenturySchoolbook", "Palatino", "Times","URWGothic",
"URWBookman", "NimbusMon", "NimbusSan", "NimbusSanCond",
"CenturySch", "URWPalladio","NimbusRom")
for (f in flist) {
fn <- paste("utest_",f,".pdf",sep="")
pdf(fn,family=f)
TestUnicode()
title(main=f) …Run Code Online (Sandbox Code Playgroud) 我想保存以下情节:
library(ggplot2)
myplot <- ggplot(iris) +
geom_point(aes(x = Sepal.Width, y = Sepal.Length)) +
ylab(expression(~delta^13*C~"[\211]"))
ggsave(myplot,
filename = "myplot.png",
type = "cairo")
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Error in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
Metric information not available for this family/device
Run Code Online (Sandbox Code Playgroud)
问题一定是表达式和 unicode 的组合,因为这两者可以工作:
myplot <- ggplot(iris) +
geom_point(aes(x = Sepal.Width, y = Sepal.Length)) +
ylab("[\211]")
myplot <- ggplot(iris) +
geom_point(aes(x = Sepal.Width, y = Sepal.Length)) +
ylab(expression(~delta^13*C))
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
编辑:我想打印“千分之一”符号。显然它的unicode是U2030,我错误地认为“\211”是一个unicode,但一定是别的东西。
编辑2:与此同时,我发现这个问题也有类似的问题。在那里,一个建议是用 保存情节encoding = "MacRoman",不幸的是这对我不起作用:
Error in png_dev(..., res = …Run Code Online (Sandbox Code Playgroud) 我想将特定的 unicode 字符保存到 .pdf 文件中ggsave。
示例代码
library(ggplot2)
ggplot() +
geom_point(data = data.frame(x=1, y=1), aes(x,y), shape = "\u2191") +
geom_point(data = data.frame(x=2, y=2), aes(x,y), shape = "\u2020")
ggsave("test.pdf", plot = last_plot()), width = 40, height = 40, units = "mm")
Run Code Online (Sandbox Code Playgroud)
但是,在保存.pdfunicode 字符时,将其转换为三个点...
尝试修复它
cairo_pdf在ggsave-> 中使用该设备没有工作。题
如何在 pdf 中同时使用两个 unicode 字符?
> sessionInfo()
R version 3.6.2
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Catalina 10.15.5
Run Code Online (Sandbox Code Playgroud)