Tôi bắt đầu sử dụng Sweave một thời gian trước đây. Tuy nhiên, giống như hầu hết mọi người tôi gặp khá sớm một vấn đề lớn: Tốc độ. Sweaving một tài liệu lớn có tuổi để chạy, mà làm cho hiệu quả làm việc khá khó khăn. Xử lý dữ liệu có thể được tăng tốc rất nhiều với cacheSweave. Tuy nhiên, lô - đặc biệt là ggplot;) - vẫn mất quá nhiều thời gian để hiển thị. Đó là cách tôi muốn sử dụng pgfSweave.Các vấn đề với ggplot và pgfSweave
Sau nhiều, nhiều giờ, cuối cùng tôi đã thành công trong việc thiết lập một hệ thống làm việc với Eclipse/Statet/Texlipse. Sau đó tôi muốn chuyển đổi một báo cáo hiện có để sử dụng với pgfSweave và có một bất ngờ xấu: hầu hết các ggplots của tôi dường như không hoạt động nữa. Cốt truyện sau đây ví dụ hoạt động hoàn hảo trong giao diện điều khiển và Sweave:
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Chạy nó với pgfSweave, tuy nhiên, tôi nhận được lỗi này:
Error in if (width > 0) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (width > 0) { :
the condition has length > 1 and only the first element will be used
Error in driver$runcode(drobj, chunk, chunkopts) :
Error in if (width > 0) { : missing value where TRUE/FALSE needed
Khi tôi loại bỏ aes (...) từ geom_point , cốt truyện hoạt động hoàn hảo với pgfSweave.
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
Chỉnh sửa: Tôi đã điều tra thêm về vấn đề này và có thể giảm sự cố cho thiết bị tikz.
này chỉ hoạt động tốt:
quartz()
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
này cung cấp cho các lỗi trên:
tikz('myPlot.tex',standAlone = T)
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
dev.off()
này chỉ hoạt động tốt cũng như:
tikz('myPlot.tex',standAlone = T)
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
dev.off()
tôi có thể lặp lại điều này với 5 khác nhau ggplots. Khi không sử dụng màu (hoặc kích thước, alpha, ...) trong ánh xạ, nó hoạt động với tikz.
Q1: Có ai có bất kỳ lời giải thích nào về hành vi này không?
Ngoài ra, bộ nhớ đệm của các khối mã không theo lô không hoạt động tốt. Đoạn mã sau đây không mất thời gian chút nào với Sweave. Với pgfSweave, mất khoảng 10 giây.
<<plot.opts,echo=FALSE,results=hide,cache=TRUE>>=
#colour and plot options are globally set
pal1 <- brewer.pal(8,"Set1")
pal_seq <- brewer.pal(8,"YlOrRd")
pal_seq <- c("steelblue1","tomato2")
opt1 <- opts(panel.grid.major = theme_line(colour = "white"),panel.grid.minor = theme_line(colour = "white"))
sca_fill_cont_opt <- scale_fill_continuous(low="steelblue1", high="tomato2")
ory <- geom_hline(yintercept=0,alpha=0.4,linetype=2)
orx <- geom_vline(xintercept=0,alpha=0.4,linetype=2)
ts1 <- 2.3
ts2 <- 2.5
ts3 <- 2.8
ps1 <- 6
offset_x <- function(x,y) 0.15*x/pmax(abs(x),abs(y))
offset_y <- function(x,y) 0.05*y/pmax(abs(x),abs(y))
plot_size <- 50*50
Điều này có vẻ là một hành vi khá lạ, vì chỉ một số biến được đặt để sử dụng sau này.
Q2: Mọi người có bất kỳ lời giải thích nào về điều đó không?
Q3: Nói chung, tôi muốn hỏi xem có ai đang sử dụng pgfSweave thành công không? Với thành công tôi có nghĩa là tất cả mọi thứ mà làm việc trong Sweave cũng làm việc trong pgfSweave, với lợi ích bổ sung của phông chữ đẹp và tốc độ được cải thiện. ;)
Cảm ơn rất nhiều vì đã trả lời!
Tôi không sử dụng sweave vì vậy không thể bình luận về điều đó nhưng tôi có thể nhận xét rằng ggplot chậm, đây là vấn đề đã biết khi vẽ dữ liệu với> 1000 điểm (đôi khi ít hơn). Nếu bạn đang tìm kiếm đồ thị "nhanh hơn", hãy thử Lattice hoặc Base Graphics. Dù vậy, chúng sẽ không đẹp như thế. –
... và thông thường, tốc độ không phải là vấn đề lớn khi vẽ đồ thị. Trừ khi bạn muốn sử dụng Sweave ...;) – donodarazao
Xin chào donodarazo, Tôi là một trong những tác giả của tikzDevice. Tôi sẽ cố gắng tái tạo các vấn đề ggplot của bạn để xem liệu có khắc phục hay không. Nếu bạn có thể lưu 'elevation',' area' và 'que_id' thành một tệp RData và gửi liên kết tải xuống đến địa chỉ email được liệt kê trong mục nhập gói trên CRAN, nó sẽ giúp ích. Tôi cũng sẽ chuyển tiếp câu hỏi này cho Cameron --- anh ta có thể có một số ý tưởng liên quan đến vấn đề pgfSweave. – Sharpie