2012-11-09 58 views
2

我很新的R和試圖在R.使用繪圖功能在Linux環境在plot.new()中出現錯誤:圖邊距過大,找不到原因?

基於R試圖從一個名爲「樣本」

jpeg('rplot1.jpg') 
plot(sample,cex=0.9,col="blue") 
Error in plot.new() : figure margins too large 
dev.off() 

數據幀從我明白我繪製數據需要增加繪圖面板的大小。不知道如何去做。已完成

+1

我在centOS(R 2.15.1)和MacOS GUI(R 2.15.0)上測試了您的代碼,它對我來說非常適合。 – bdemarest

+0

感謝您的測試。但是我不確定爲什麼這個錯誤對我來說。我測試了紅帽(R 2.15.1)和窗(R 2.15.2) –

回答

1

您正在給plot函數提供一個列表(因爲數據框是列表)。嘗試改爲:

plot(sample[[1]], sample[[2]], cex=0.9, col="blue") 
1

只是爲了澄清,通過與所有數字列data.frameplot功能等同於調用pairs暗算對方的所有列的散點圖矩陣。你可能知道這一點。

據我所知,錯誤的原因很簡單,設備(jpeg)不夠大,不足以合理地包含整個散點圖矩陣。例如,

mysamp <- matrix(rnorm(10000), nrow = 100) 
mydat <- as.data.frame(mysamp) 
plot(mydat) 
# Error in plot.new() : figure margins too large 

爲了成功創建您的情節,通過較大的值的jpegwidthheight參數。這是一個hwFact參數的函數,該參數應該是一個數字值,用於乘以jpeg的高度和寬度。

myFun <- function(data, hwFact = 1){ 
    jpeg("rplot1.jpg", width = 500 * hwFact, height = 500 * hwFact) 
    plot(data, cex = .9, col = "blue") 
    dev.off() 
} 

以下迭代使用上述函數來依次增加hwFact直到創建JPEG。一旦成功創建了jpeg,就會打印迭代編號並停止迭代。 (這將是非常的情節,這將很可能是太小,無法閱讀任何最低限度的大小。)

for(i in 1:20){ 
    res <- tryCatch(myFun(mydat, i), error = function(e) e) 
    if(!"error" %in% class(res)) { 
     print(i) 
     break 
    } 
} 
# [1] 3 

所以它採取了JPEG與1500的寬度和高度(即500 * 3 )創建一個(完全難以辨認的)情節。一旦你知道最小尺寸,你將不得不嘗試找到合適的尺寸。