导出Lattice透明图片时输出中文字符

先看一张图:



  • 中文字符正常显示
  • Alpha通道正确保留

这是通过以下代码实现的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
library(lattice)
library(tidyr)
library(dplyr)
iris2 <- iris %>%
gather(Length, valueL, -Species, -Sepal.Width, -Petal.Width) %>%
gather(Width, valueW, -Species, -Length, -valueL)
levels(iris2$Species) <- c("山鸢尾", "变色鸢尾", "维吉尼亚鸢尾")
levels(iris2$Length) <- c("花萼宽度", "花瓣宽度")
levels(iris2$Width) <- c("花萼长度", "花瓣长度")
pdf(file = '/Volumes/RamDisk/input.pdf', family = "GB1", width = 4, height = 4)
xyplot(valueW ~ valueL | Length * Width, groups = Species, data = iris2,
auto.key = list(column = 3, space = "bottom", fontsize = 5),
xlab = "", ylab = list(label = c("花萼", "花瓣"), fontsize = 20), main = list(label = "三种鸢尾的数据", fontsize = 20))
dev.off()

实现原理

  • 在R中,使用family = "GB1"参数能够在导出的任何一张为PDF格式的图中显示中文字符。
  • 在函数pdf()中,widthheight控制的不再是像素(pixel),而是表示英寸(inch)。
    • 1 英寸 = 150 像素
    • 此外,R还可以识别height = "a4".
  • 我们还可以通过命令行将pdf文件转换为png图片,同时保留Alpha通道

实践转换

  • 对于单张图片,只需用终端cd到pdf所在目录,然后键入:

    1
    sips -s format png --out "output.png" "input.pdf"
  • 对于多张图片,如果需要批量转换,使用这个命令即可。

    1
    find -iname "*.pdf" | while read pf; do; sips -s format png --out ${pf%.*}.png" $pf; done
0%