什么图形设备让我在图表中使用系统字体文本?基本图形系统只有少量关于par(family=...)选项的文档.
理想情况下,我希望能够使用任何字体,我可以浏览xfontselLinux上的工具或其他平台上的等效工具.
我目前的解决方案是绘制为PDF,然后使用第三方程序替换PDF中的字体.这不太理想.
如何在使用ggplot2创建的PDF图中为标签,标题和类似内容使用Unicode字符?
请考虑以下示例:
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data=iris, main="A?????????????????s????x??")
ggsave("t.pdf")
Run Code Online (Sandbox Code Playgroud)
图表的标题使用Unicode字符(小型大写字母),在输出中显示为....只有pdf图才会出现问题; 如果我用最后一行替换ggsave("t.png"),那么输出就是预期的.
我究竟做错了什么?我的R脚本是UTF-8编码.一些系统信息:
R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Run Code Online (Sandbox Code Playgroud)
在寻找这个问题的解决方案时,我发现一些证据表明R使用单字节编码进行多字节编码,例如UTF-8用于PDF或postscript输出.我还发现了一些建议,例如,能够让欧元符号正常工作,但没有一般解决方案.
我想在ggplot中使用unicode字符作为绘图的形状,但由于未知原因它们不会渲染.我确实在这里找到了类似的查询,但是我也无法使这个例子工作.
任何线索为什么?
请注意,我不想将unicode字符用作"调色板",我希望绘制的每个项目geom_point()都是相同的形状(颜色将指示相关变量).
运行
Sys.setenv(LANG = "en_US.UTF-8")
Run Code Online (Sandbox Code Playgroud)
并重新启动R没有帮助.在sprintf()中包装unicode也没有用.
这是一个示例代码,用于说明问题:
library(tidyverse)
library(ggplot2)
library(Unicode)
p1 = ggplot(mtcars, aes(wt, mpg)) +
geom_point(shape="\u25D2", colour="red", size=3) +
geom_point(shape="\u25D3", colour="blue", size=3) +
theme_bw()
plot(p1)
Run Code Online (Sandbox Code Playgroud)
这就是结果.
我使用macOS Sierra(10.13.6),R版本3.5.1和Rstudio 1.0.143.
感谢任何帮助!我一直在寻找一些寻找解决方案并发布到#Rstats的论坛,到目前为止没有任何效果.可能是解决方案隐藏在某个地方的某个线程中,但如果是这样,我就无法检测到它,我怀疑其他人也错过了它.所以,在这里,我正在制作我的第一篇文章,以堆栈溢出:)
我使用以下代码制作一个具有比例点的地图到一个外部特征(总计),但我想改变标记的宽度.
p <- ggplot()
p <- p + geom_polygon( data=all_states, aes(x=LONG*-1, y=LAT, group = ID),colour="black", fill="white" )
p <- p + geom_point( data=mydata, aes(x=long*-1, y=lat, size = Total),color="mediumblue", shape=1) +
scale_size(range = c(1,11), name="Sells Volume")+
labs(title="Reglone SL")+
xlab(" ")+
ylab(" ")
p
Run Code Online (Sandbox Code Playgroud)