2014-09-03 64 views
0

希望得到一些指針或某些經驗的洞察力,因爲我在字面上忽略了這一點,一直在嘗試2整天來設置正確的值以使函數吐出乾淨來自gbm.plot函數的簡單線圖(程序包dismo & gbm)。(R)軸寬度gbm.plot

這是我開始的地方。 bty = n在同等水平關閉方框&離開我只剩下&底部軸。 Gbm.plot通常會爲每個解釋變量吐出一個圖,因此通常有6個圖等,但我正在調整它,以便每個變量循環執行一個變量&。我已經刪除了很多其他代碼的循環&,所以很容易看到發生了什麼。

png(filename = "whatever.png",width=4*480, height=4*480, units="px", pointsize=80, bg="white", res = NA, family="", type="cairo-png") 
par(mar=c(2.6,2,0.4,0.5), fig=c(0,1,0.1,1), las=1, bty="n", mgp=c(1.6,0.5,0)) 
    gbm.plot(my_gbm_model, 
     n.plots=1, 
     plot.layout = c(1,1), 
     y.label = "", 
     write.title=F, 
     variable.no = 1, #this is part of the multiple plots thing, calls the explanatory variable 
     lwd=8, #this controls the width of the main result line ONLY 
     rug=F) 
dev.off() 

this is what the initial situation looks like

所以這是起始狀態是什麼樣子。目的:使軸&刻度較粗。而已。

"lwd=20"寫入par什麼都不做。

axes=F添加到gbm.plot()中將關閉軸和其號碼。所以我得出結論,這些軸的控制是由gbm.plot處理的,而不是par。這裏是令人沮喪和廢話的地方。從搜索接受的智慧說,lwd應該控制這一點,但它只能控制上面我注意到的擺動中心線。那麼也許我可以將axis(side=1, lwd=8)加入gbm.plot()

smooth criminal

它運行,但莫名其妙地增加了一個更流暢! (這是非常薄的&很難在網上看到,但它在那裏,我保證)。它增加了這些警告:

In if (smooth & is.vector(predictors[[j]])) { ... : 
    the condition has length > 1 and only the first element will be used 

精細,R將是一個傢伙對看似毫無道理,我會繼續封堵泄漏,因爲他們來了。與軸之前和現在新的代碼平滑關閉:

png(filename = "whatever.png",width=4*480, height=4*480, units="px", pointsize=80, bg="white", res = NA, family="", type="cairo-png") 
    par(mar=c(2.6,2,0.4,0.5), fig=c(0,1,0.1,1), las=1, bty="n", mgp=c(1.6,0.5,0)) 
     gbm.plot(my_gbm_model, 
      n.plots=1, 
      plot.layout = c(1,1), 
      y.label = "", 
      write.title=F, 
      variable.no = 1, 
      lwd=8, 
      rug=F, 
      smooth=F, 
      axis(side=1,lwd=8)) 
    dev.off() 

給出錯誤:

Error in axis(side = 1, lwd = 8) : plot.new has not been called yet 

所以這顯然畫中plot軸,因爲我無法從par影響軸和我可以把他們在plot關閉。我可以做我想做的事情,並使一個軸粗體化,但這樣會產生更平滑的警告。我可以關閉平滑器,但之後失敗,因爲它說plot.new尚未被調用。這甚至不能解釋我必須處理的另一個軸,這也會導致plot.new失敗,如果我順序調用2軸並允許更平滑。

我在這裏是個大笑話的屁股,還是我錯過了一些明顯的東西?我花了足夠長的時間來計算出par應該是在所有的圖表之前,除非你用png等輸出它們,在這種情況下它必須在png之間& plot - 令人難以置信的是,這個信息不在?par。我知道我正在通過咆哮離開話題,對不起,但是,整整兩天。這是每個人在R中繪圖的經驗嗎?

我打算在冰箱裏打開伏特加。我很欣賞我沒有把完整的可重複代碼放在這裏,道歉,如果絕對必要,我可以做到,但它是一個巨大的時代來到可重現的舞臺,我希望有人可以看到一個基本的邏輯/編碼失敗尖叫在他們從我所給的。

謝謝你們。

編輯:重現 核心數據CSV:https://drive.google.com/file/d/0B6LsdZetdypkWnBJVDJ5U3l4UFU (我試過做這些之前,可重複的數據,我不能工作,如何做到這一點) 樣品< -read.csv(「data.csv」 ,header = TRUE,row.names = NULL) my_gbm_model < -gbm.step(data = samples,gbm.x = 1:6,gbm.y = 7,family =「bernoulli」,tree.complexity = 2,學習.rate = 0.01,bag.fraction = 0.5))

+1

發佈一個可重現的例子。 (我試圖使用小插圖構建一個,經過幾個步驟後出現錯誤,似乎你在這裏推卸責任。) – 2014-09-03 00:39:25

+0

沒有'gbm'對象樣本,我們不能自己再現這個情節,所以我們無法幫你排除故障。但是'axis(side = 1,lwd = 8)'不應該作爲參數傳遞給函數。這是一個單獨的函數,在* plot()被調用後,它被稱爲*:plot(1:3,1:3,xaxt =「n」);例如,軸(1,lwd = 7)'。但'gbm.plot'可能有不同的處理方式。 – MrFlick 2014-09-03 00:49:53

+0

通常當你花時間創建一個最小的,可重現的例子時,你可以很容易地找到自己的錯誤。在發佈問題之前不這樣做實在是浪費每個人的時間。關鍵詞是「最小」和「可重現」。 R幫助頁面通常是這類示例的一個很好的起點。無論您使用哪種語言,這都是您應該開發的一項基本技能。 – MrFlick 2014-09-03 00:53:15

回答

1

這裏是會擴大你的軸蜱:

..... , lwd.ticks=4 , ... 

我預測基於沒有測試,因爲我不斷收到您提供的有限代碼的錯誤),它會在gbm.plot或後續的軸調用中正確處理。有將需要後續axis電話,其實他們兩個人(因爲你注意到「LWD」被傳遞到處亂):

png(filename = "whatever.png",width=4*480, height=4*480, units="px", pointsize=80, bg="white", res = NA, family="", type="cairo-png") 
    par(mar=c(2.6,2,0.4,0.5), fig=c(0,1,0.1,1), las=1, bty="n", mgp=c(1.6,0.5,0)) 
     gbm.plot(my_gbm_model, 
      n.plots=1, 
      plot.layout = c(1,1), 
      y.label = "", 
      write.title=F, 
      variable.no = 1, 
      lwd=8, 
      rug=F, 
      smooth=F, axes="F", 
      axis(side=1,lwd=8)) 

     axis(1, lwd.ticks=4, lwd=4) 
      # the only way to prevent `lwd` from also affecting plot line 
     axis(2, lwd.ticks=4, lwd=4) 
    dev.off() 

這是我用一個簡單的例子,請參閱:

png(); Speed <- cars$speed 
Distance <- cars$dist 
plot(Speed, Distance, 
    panel.first = lines(stats::lowess(Speed, Distance), lty = "dashed"), 
    pch = 0, cex = 1.2, col = "blue", axes=FALSE) 
axis(1, lwd.ticks=4, lwd=4) 
     axis(2, lwd.ticks=4, lwd=4) 
dev.off() 

enter image description here

+0

歡呼,感覺像gbm.plot是造成奇怪的行爲。會的當我起牀的時候做一個測試。 – 2014-09-03 06:23:02

+0

我不認爲我會責怪'gbm.plot'。它通過大部分繪圖參數以及大多數硬編碼繪圖功能。基本繪圖函數中的「lwd」和「lwd.line」沒有區別。 – 2014-09-03 06:28:40

+0

感謝您的幫助。通過執行額外的axis()行並刪除現有的軸標籤,軸標籤只增加了20%。這讓我再次關注函數,並且我意識到gbm.plot只是plot.gbm的一個奇妙的包裝,所以我不直接調用它。不幸的是,現在我無法刪除yaxis標籤,所以這是下一個問題......! – 2014-09-04 20:33:18