2011-12-15 26 views
7

tôi đang âm mưu một số dữ liệu trong R sử dụng các lệnh sau:Giảm kích thước tập tin pdf của cốt truyện trong R

jj = ts(read.table("overlap.txt")) 
pdf(file = "plot.pdf") 
plot(jj, ylab="", main="") 
dev.off() 

Kết quả trông như thế này:

enter image description here

Vấn đề tôi có là tệp pdf mà tôi nhận được khá lớn (25Mb). Có phải cách để giảm kích thước tệp không? JPEG không phải là một lựa chọn vì tôi cần đồ họa vector.

+0

Bạn vừa vẽ một số phân đoạn đường không xác định (lớn?). Nói chung, pdf là cách tồi tệ nhất có thể để mã hóa một cái gì đó. Bạn đã thử tạo ra eps hoặc svg với 'cairo()'? –

+0

Nó không có vẻ đặc biệt hài hước. lô đầu tiên trông hơi chi tiết. Tóm tắt (jj) nói gì? Có phải là đi lên đến 4e + 05? – Spacedman

+0

Đối với các biến có nhiều giá trị lặp lại, người ta có thể đặt cùng một giải pháp với 'rle' sẽ giảm giá trị lặp lại và lưu tọa độ thời gian của các điểm thay đổi ... nhưng điều đó sẽ phức tạp hơn một chút, chứ không phải lưu bất cứ điều gì cho các biến liên tục khác nhau –

Trả lời

6

Bạn đang vẽ rất nhiều đường hoặc điểm. Các định dạng hình ảnh vector như pdf, ps, eps, svg, v.v. duy trì thông tin hợp lý về tất cả các điểm, đường, hoặc các mục khác làm tăng độ phức tạp, dịch thành kích thước và thời gian vẽ, vì số điểm tăng lên. Nói chung hình ảnh vector là tốt nhất trong một số cách, nhỏ gọn nhất, quy mô tốt nhất và tái tạo chất lượng cao nhất. Tuy nhiên, nếu số lượng phần tử đồ họa trở nên rất lớn thì tốt nhất là nên chuyển sang định dạng hình ảnh raster như png. Khi bạn chuyển sang raster, tốt nhất bạn nên có ý tưởng tốt về kích thước hình ảnh bạn muốn, cả pixel và cả những thứ như phép đo in để tạo ra hình ảnh tốt nhất.

Để biết thông tin theo hướng khác, hình ảnh raster quá lớn, hãy xem số answer này.

1

Khó mà nói mà không nhìn thấy nội dung của cốt truyện - đăng ảnh chụp màn hình?

Tôi nghi ngờ rằng có rất nhiều dòng rất chi tiết và hầu hết thông tin có thể không hiển thị - rất nhiều thứ chồng lấp hoặc chi tiết rất nhỏ. Hãy thử làm mỏng dữ liệu của bạn trong một chiều hoặc khác. Tôi nghi ngờ bạn sẽ mất thông tin hiển thị.

+0

Tôi đã thêm cốt truyện. – alex

+1

Ngoài ra còn có các công cụ hậu xử lý cho các tệp pdf để giảm mức độ tràn. –

4

Một cách để giảm kích thước tệp là giảm số lượng giá trị bạn có. Giả sử bạn có một dataframe gọi df:

# take sample of data from dataframe 
sampleNo = 10000 
sampleData <- df[sample(nrow(df), sampleNo), ] 

Tôi nghĩ rằng chỉ có giải pháp thay thế khác trong R là để tạo ra một tổ chức phi-vector. Bên ngoài của R bạn có thể sử dụng Acrobat Professional (không miễn phí) để tối ưu hóa bản pdf. Điều này có thể làm giảm kích thước tập tin rất nhiều.

+0

Thật tuyệt vời khi có được một số mẫu bằng nhau. Bạn chỉ lấy đầu/đuôi. –

4

Bạn đang sử dụng phiên bản R nào? Trong R 2.14.0, pdf() có đối số compress để hỗ trợ nén. Tôi không chắc chắn nó có thể giúp ích gì cho bạn, nhưng cũng có những công cụ khác để nén các tệp PDF như Pdftkqpdf. Tôi có hai trình bao bọc cho chúng trong gói animation, nhưng bạn có thể muốn sử dụng dòng lệnh trực tiếp.

+0

Việc nén không giúp được gì nhiều. Nó có một số thuật toán đơn giản ở đó. Bạn không thể thay đổi nó. Để có mẫu lấy mẫu bằng nhau, có lẽ sẽ giúp ích nhiều nhất. –

9

Hãy xem tools::compactPDF - bạn cần phải cài đặt qpdf hoặc ghostscript nhưng có thể tạo sự khác biệt lớn đối với kích thước tệp pdf.

+0

Bạn có thể cho ví dụ về điều này không? Tôi không thể làm 'công cụ :: compactPDF (tên tệp, qpdf = Sys.getenv (" R_QPDF "," qpdf "), gs_cmd = Sys.getenv (" R_GSCMD "," "), gs_quality =" màn hình ", gs_extras = ký tự (), ratio = 0.2) 'vì nó không thành công. - - Tất cả các công cụ cần thiết được cài đặt trong Debian 8.5. Bạn có cần phải nhập thêm thứ gì đó không? - - Tôi cảm thấy câu trả lời này bây giờ còn sơ khai. –

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