2017-11-10 32 views
6

Có thể lưu một âm mưu mà không hiển thị nó không?Lưu âm mưu mà không hiển thị nó ở tất cả

Tôi đã thực hiện một chút ggplot để có thể sao chép đồ thị thành powerpoint dễ dàng, nó sao chép biểu đồ vào khay nhớ tạm, nhưng có thể thấy cửa sổ thiết bị mở và đóng nhanh, hơi khó xử, tôi có thể tránh điều này không?

Tôi đang sử dụng windowsrstudio.

mã thể sanh sản:

library(ggplot) 

`-.gg` <- function(e1,e2){ 
    assertthat::assert_that(is.numeric(e2), 
          length(e2)<= 2) 
    if(identical(e2,0)) return(invisible(NULL)) 
    W <- 8 
    H <- 4.5 
    dev.new(width=W * head(e2,1), height=H * tail(e2,1),noRStudioGD =TRUE) 
    print(e1) 
    savePlot("clipboard", type="wmf") 
    dev.off() 
    e1 
} 

ggplot(data.frame(x=1:10,y=1:10),aes(x,y)) + geom_point() - 1 - 0 

Edit:

Mã của tôi, và giải pháp được lựa chọn, có những vấn đề đối phó với semi-transparency.It của ok hầu hết thời gian, nhưng trường hợp ngoại lệ sẽ làm phiền. Có thể một đường dẫn đến giải pháp chung là lưu nó với tempfile rồi đọc nó vào khay nhớ tạm, hoặc thông qua chức năng R thích hợp, hoặc với dòng lệnh sử dụng system (có thể sẽ mở tệp vô hình và sao chép).

Trả lời

3

này hoạt động trên Windows: sử dụng thiết bị win.metafile(). Nếu bạn không cung cấp tên tập tin, nó sẽ lưu vào clipboard. Vì vậy, chức năng của bạn nên là

library(ggplot2) 

`-.gg` <- function(e1,e2){ 
    assertthat::assert_that(is.numeric(e2), 
          length(e2)<= 2) 
    if(identical(e2,0)) return(invisible(NULL)) 
    W <- 8 
    H <- 4.5 
    win.metafile(width=W * head(e2,1), height=H * tail(e2,1)) 
    print(e1) 
    dev.off() 
    e1 
} 

ggplot(data.frame(x=1:10,y=1:10),aes(x,y)) + geom_point() - 1 - 0 
+0

Hoàn hảo! cảm ơn rất nhiều –

+0

Tôi đã quá tốt là đúng, 'ggplot (data.frame (x = 1: 10, y = 1: 10), aes (x, y)) + geom_smooth() - 1 - 0' trả về' nửa công khai không được hỗ trợ trên thiết bị này'. 'geom_smooth' sẽ không hoạt động hoàn toàn, nhưng có vẻ như tham số' alpha' được hỗ trợ. –

+0

ví dụ tốt hơn: 'ggplot (iris, aes (Sepal.Length, Sepal.Width)) + geom_smooth() - 1 - 0' –

1

Trên cửa sổ và R 3.4.2, sử dụng Sys.sleep đã có thể xem những âm mưu thay vì chớp và bỏ lỡ

`-.gg` <- function(e1,e2){ 
    assertthat::assert_that(is.numeric(e2), 
         length(e2)<= 2) 
    if(identical(e2,0)) return(invisible(NULL)) 
    W <- 8 
    H <- 4.5 
    dev.new(width=W * head(e2,1), height=H * tail(e2,1),noRStudioGD =TRUE) 
    print(e1) 
    savePlot("clipboard", type="wmf") 
    Sys.sleep(3) ## 
    dev.off() 
    e1 
} 

ggplot(data.frame(x=1:10,y=1:10),aes(x,y)) + geom_point() - 1 - 0 
+1

Đó là một ý tưởng hay vì nó làm cho nó khó xử hơn, nhưng tôi cũng tò mò nếu tôi thực sự không thể hiển thị nó cả. –

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