如何解决将标签中带有表情符号的图形保存为 R
使用此处的最佳答案:
How to export images of diagrammer in R
我设法将一个 .dot
文件导入 R,然后使用线条将包含名称和箭头的图形的可视化图导出为 pdf
# setwd("/Folder with .dot graph file")
library(DiagrammeR)
library(DiagrammeRsvg)
DiagrammeR::grViz("mygraph.dot") %>%
export_svg %>% charToRaw %>% rsvg_pdf("graph.pdf")
label
文件中的 .dot
字段包含代表国家/地区的表情符号。以下是 .dot
文件的一小部分:
/* Created by igraph 1.2.6 */
digraph {
0 [
name=1
type=NA
label="A name\n??"
shape=note
color=Black
fillcolor=White
style=filled
];
1 [
name=2
type=NA
label="Another Name\n??"
shape=note
color=Black
fillcolor=White
style=filled
];
.
.
.
1 -> 0 [
rel=a
"type.x"=NA
"type.y"=NA
];
2 -> 0 [
rel=a
"type.x"=NA
"type.y"=NA
];
.
.
.
}
当我使用上面的代码将图形转换为 pdf 时,表情符号不会出现在最终的 pdf 中。
有没有办法将标签中包含表情符号的 .dot
文件中的图形转换为仍会显示表情符号的 pdf?
解决方法
使用 @charlie-gallagher 的评论,我找到了解决方案。
第一步是将完整图形(带有文本标签、箭头等)直接导出为 docker run -it --device=/dev/net/tun:/dev/net/tun -cap-add=NET_ADMIN <image>
。
int main(void) {
const char *ifname = "tunx";
const char *ifaddr = "10.0.0.1/24";
char tun_name[IFNAMSIZ];
char buffer[2096];
int tun_fd = -1;
char cmd[1024] = "";
int err = -1;
strcpy(tun_name,ifname);
tun_fd = tun_alloc(tun_name,IFF_TUN); /* tun interface */
if (tun_fd < 0) {
fprintf(stderr,"failed to alloc_tun. tun_fd: %d\n",tun_fd);
exit(1);
}
printf("tun_fd: %d\n",tun_fd);
printf("ip commands \n");
snprintf(cmd,sizeof(cmd),"/bin/ip addr add dev %s %s",ifname,ifaddr);
err = system(cmd);
fprintf(stdout,"Running: %s,err: %d\n",cmd,err);
if (err < 0) {
fprintf(stderr,"failed system. Cmd:%s,err: %d (%s)\n",err,strerror(errno));
exit(1);
}
snprintf(cmd,"/bin/ip link set %s up",ifname);
err = system(cmd);
fprintf(stdout,strerror(errno));
exit(1);
}
while (1) {
/* Note that "buffer" should be at least the MTU size of the interface,eg 1500 bytes */
int nread = read(tun_fd,buffer,sizeof(buffer));
if(nread < 0) {
perror("Reading from interface");
close(tun_fd);
exit(1);
}
/* Do whatever with the data */
printf("Read %d bytes from device %s\n",nread,tun_name);
}
return 0;
}
.svg
文件创建后,我只是用另一个应用程序将 svg 转换为 pdf。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。