2012-05-03 27 views
5

Trong R, khi lưu một âm mưu vào tệp PDF hoặc tệp Postscript, dấu gạch nối trong nhãn trục được chuyển thành dấu trừ. Điều này, rõ ràng, là do thiết kế. Theo tài liệu cho thiết bị "postscript":Bất kỳ cách nào để vô hiệu hóa "trừ hack" trong đầu ra PDF/Poscript?

Có một ngoại lệ [đối với quy tắc mã hóa thông thường]. Ký tự 45 (‘" - "’) luôn được đặt là âm (giá trị của nó trong Adobe ISOLatin1) mặc dù nó là dấu gạch nối trong các mã hóa khác. Dấu gạch nối có sẵn dưới dạng ký tự 173 (bát phân 0255) trong tất cả mã hóa La tinh, Cyrillic và Hy Lạp. (Điều này có thể được nhập là ‘" \ uad "’ bằng ngôn ngữ UTF-8.)

Có cách nào để tắt tính năng này không?

Sự cố tôi gặp phải là tôi thường lưu các ô theo nhiều định dạng khác nhau và nếu tôi làm theo giải pháp "\ uad" được đề xuất, tôi sẽ nhận được dấu gạch ngang mong đợi ở đầu ra Postscript/PDF nhưng không có gì khi hiển thị ô của tôi các thiết bị đồ họa như PNG. Tôi không muốn tạo hai phiên bản của từng ô, một bản cho PDF và một cho PNG.

Nếu tôi có thể vô hiệu hóa "trừ lỗi", hành vi hiển thị trên các thiết bị đồ họa sẽ nhất quán và tôi có thể đơn giản "in" một âm mưu tới nhiều thiết bị để có được ở các định dạng khác nhau. Ví dụ: tôi muốn có thể làm như sau và có dấu gạch nối hiển thị nhất quán trong cả hai phiên bản PDF và PNG của lô:

p <- qplot(arrival_rate, mean_service_time, data = response_times, ...) 
ggsave(p, file = "/tmp/service-scaling.pdf", useDingbats = F) 
ggsave(p, file = "/tmp/service-scaling.png") 

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

Trả lời

7

Nếu máy của bạn hỗ trợ nó (và bạn có thể nhập capabilities() để tìm hiểu xem nó có hoạt động không), thay vào đó bạn có thể sử dụng cairo_pdf(). Có vẻ như để xử lý "-" giống như các thiết bị âm mưu khác:

enter image description here enter image description here

Ở đây, bởi vì tôi cũng có thể bao gồm nó, là mã tôi đã sử dụng cho hai file PDF trên:

cairo_pdf("cairo_pdf.pdf", width=6, height=3.5) 
    par(mar=c(10,4,4,1)) 
    plot(1:10, type = "n", axes = FALSE, 
     main = "Plotted using cairo_pdf()", 
     ylab = "", xlab = "x-y", cex.lab = 10) 
dev.off() 

pdf("pdf.pdf", width=6, height=3.5) 
    par(mar=c(10,4,4,1)) 
    plot(1:10, type = "n", axes = FALSE, 
     main = "Plotted using pdf()", 
     ylab = "", xlab = "x-y", cex.lab = 10) 
dev.off() 
+1

Điều đó phù hợp với tôi! Sau đây tạo ra chính xác những gì tôi muốn: 'ggsave (file =" /tmp/service-scaling.pdf ", p, cairo_pdf)' –

0

Có một giải pháp thay thế cho pdf() được mô tả here: thay thế dấu gạch nối "-" bằng ký tự unicode "\255" hoặc bằng UTF8 "\uad". Điều này có thể không in độc đáo trong R-console, nhưng sẽ có trong pdf. Nó có thể dễ dàng được thay thế bằng gsub("-", "\uad", "x-y):

enter image description here

pdf("pdf.pdf", width=5, height=4) 
par(mar=c(6,2,2,2), mfrow=c(2,1)) 
plot(1:10, type = "n", axes = FALSE, 
    main = "Default", 
    ylab = "", xlab = "x-y", cex.lab = 8) 
plot(1:10, type = "n", axes = FALSE, 
    main = "with '\\uad'", 
    ylab = "", xlab = gsub("-", "\uad", "x-y"), cex.lab = 8) 
dev.off() 

tôi đã kết thúc sử dụng giải pháp này bởi vì tôi muốn xuất khẩu một pdf trong CMYK colormode, đó là không thể trong cairo_pdf (và thay thế chuyển đổi sau để CMYK làm cho kích thước tập tin tăng gấp 10 lần đối với các tệp nhỏ). Tôi hy vọng ai đó khác có thể sử dụng nó.

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