希望得到一些指針或某些經驗的洞察力,因爲我在字面上忽略了這一點,一直在嘗試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()
所以這是起始狀態是什麼樣子。目的:使軸&刻度較粗。而已。
把"lwd=20"
寫入par
什麼都不做。
將axes=F
添加到gbm.plot()
中將關閉軸和其號碼。所以我得出結論,這些軸的控制是由gbm.plot
處理的,而不是par
。這裏是令人沮喪和廢話的地方。從搜索接受的智慧說,lwd
應該控制這一點,但它只能控制上面我注意到的擺動中心線。那麼也許我可以將axis(side=1, lwd=8)
加入gbm.plot()
?
它運行,但莫名其妙地增加了一個更流暢! (這是非常薄的&很難在網上看到,但它在那裏,我保證)。它增加了這些警告:
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))
發佈一個可重現的例子。 (我試圖使用小插圖構建一個,經過幾個步驟後出現錯誤,似乎你在這裏推卸責任。) – 2014-09-03 00:39:25
沒有'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
通常當你花時間創建一個最小的,可重現的例子時,你可以很容易地找到自己的錯誤。在發佈問題之前不這樣做實在是浪費每個人的時間。關鍵詞是「最小」和「可重現」。 R幫助頁面通常是這類示例的一個很好的起點。無論您使用哪種語言,這都是您應該開發的一項基本技能。 – MrFlick 2014-09-03 00:53:15