2017-01-01 19 views
5

Nói rằng tôi có một tập dữ liệu như thế này:Sử dụng một phông chữ từ extrafont trong grid.draw

dat <- data.frame 
    text = c(
    "It made me feel very positive to brand X", 
    "It was clear and easy to understand", 
    "I didn't like it al all"), 
    value=runif(3) 
) 

tôi có thể vẽ nó trong ggplot sử dụng có thể các TradeGothic LT CondEighteen phông chữ từ extrafonts gói:

library(ggplot2) 
p <- ggplot(dat, aes(text, value)) + 
    geom_bar(stat="identity") + 
    coord_flip() + 
    labs(title="  Do you agree with the following statements?")+ 
    theme_bw(16)+ 
    theme(text=element_text(family="TradeGothic LT CondEighteen")) 

ggsave('plot.pdf', plot = plot, path = "/Users/jacobdeecurtis/Desktop") 

enter image description here

Nhưng khi tôi sử dụng ggplot_gtable trên cốt truyện:

gt <- ggplot_gtable(ggplot_build(plot)) 
gt$layout[which(gt$layout$name == "title"), c("l", "r")] <- c(1,   max(gt$layout$r)) 
grid::grid.draw(plot) 

ggsave('plot.pdf', plot = plot, path = "/Users/jacobdeecurtis/Desktop") 

Tôi gặp lỗi khi chạy hàm grid.draw. Lỗi này là:

Error in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : 
    polygon edge not found 
In addition: Warning messages: 
1: In grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : 
    no font could be found for family "TradeGothic LT CondEighteen"... 

Tôi không nhận được báo lỗi khi tôi không sử dụng TradeGothic LT CondEighteen phông chữ .

Cảm ơn sự giúp đỡ của bạn!

+0

Hãy thử ' "TradeGothic LT CondEighteen"' – hrbrmstr

+0

Thú vị. Đó không phải là những gì tôi đã cố gắng? Nó khác biệt như thế nào? –

+0

DID bạn làm 'extrafont :: loadfonts()'? – hrbrmstr

Trả lời

6

Tôi, uh, "vừa xảy ra phải có" một bản sao của phông chữ này và đã thực hiện điệu nhảy extrafont::font_import() và nhận được lỗi của bạn. Tuy nhiên, khi kiểm tra thêm:

library(purrr) 

loadfonts() 

pdfFonts() %>% 
    map_chr("family") %>% 
    keep(~grepl(".*Trade.*", .)) 
## [1] "TradeGothic LT CondEighteen" 

có vẻ như thiết bị PDF muốn tên này.

Trong khi R có một loạt các awesomeness, cách nó đề với phông chữ là về như sắc thái và thân thiện và có thể sử dụng như một con quạ thằn lằn (#atla).

CẬP NHẬT

dụ hoàn chỉnh (nếu không có sự chia data.frame mã tạo và tham khảo plot vs p và thực sự grid.draw() ing gt vs plot hoặc p sau khi sửa đổi gtable ggplot:

library(ggplot2) 
library(grid) 
library(extrafont) 

dat <- data.frame(
    text = c(
    "It made me feel very positive to brand X", 
    "It was clear and easy to understand", 
    "I didn't like it al all"), 
    value=runif(3) 
) 

p <- ggplot(dat, aes(text, value)) + 
    geom_bar(stat="identity") + 
    coord_flip() + 
    labs(title="  Do you agree with the following statements?")+ 
    theme_bw(16)+ 
    theme(text=element_text(family="TradeGothic LT CondEighteen")) 

loadfonts() 

ggsave('plot.pdf', plot=p, path="~/Desktop") 

Đó ^^ một phần làm cho tệp PDF sau (được xuất từ ​​Bản xem trước dưới dạng PNG):

enter image description here

gt <- ggplot_gtable(ggplot_build(p)) 
gt$layout[which(gt$layout$name == "title"), c("l", "r")] <- c(1, max(gt$layout$r)) 

pdf("~/Desktop/plot.pdf") 
grid::grid.draw(gt) 
dev.off() 

Đó ^^ phần làm cho PDF sau (xuất khẩu từ Preview như một PNG):

enter image description here

p <- ggplot(dat, aes(text, value)) + 
    geom_bar(stat="identity") + 
    coord_flip() + 
    labs(title="  Do you agree with the following statements?")+ 
    theme_bw(16)+ 
    theme(text=element_text(family="TradeGothicLT-CondEighteen")) 

gt <- ggplot_gtable(ggplot_build(p)) 
gt$layout[which(gt$layout$name == "title"), c("l", "r")] <- c(1, max(gt$layout$r)) 

grid::grid.draw(gt) 

Dưới đây là một màn hình grab từ RStudio (với bit của RStudio Giao diện người dùng được bao gồm để hiển thị nó trong thiết bị đồ họa RStudio):

enter image description here

Thật đáng buồn khi chúng ta phải làm điều này (thay đổi quy ước đặt tên cho phông chữ để các bit khác nhau của mã trình bày R có thể chọn đúng) nhưng đó là trạng thái hiện tại của phông chữ trong R.

tôi tạo ra nội dung cho báo cáo nghiên cứu cho công ty của tôi và mã chủ đề riêng biệt cho màn hình (quá trình phát triển) và thế hệ sản xuất PDF (cho bàn giao kết quả cuối cùng cho đội sáng tạo). Đó là một cái nạng khó chịu, nhưng nó hoạt động.

+0

Vâng, mọi thứ đang hoạt động. Cảm ơn bạn! –

Các vấn đề liên quan