Надеясь на некоторые указатели или некоторое понимание опыта, поскольку я буквально схожу с ума по этому поводу, я пытался в течение 2 полных дней установить правильные значения, чтобы функция выдавала чистые простые линейные графики из функции gbm.plot (пакеты dismo и гбм).
Вот с чего я начну. 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
. Я знаю, что отклоняюсь от темы, разглагольствуя, извините, но да, 2 полных дня. Был ли у всех такой опыт построения графиков в R?
Я собираюсь открыть водку в морозилке. Я ценю, что не поместил здесь полный воспроизводимый код, извиняюсь, я могу сделать, если это абсолютно необходимо, но это такой огромный упадок времени, чтобы добраться до воспроизводимой стадии, и я надеюсь, что кто-то может увидеть основной логический / кодовый сбой, кричащий в их из того, что я дал.
Спасибо, парни.
РЕДАКТИРОВАТЬ: csv основных данных воспроизводимости: https://drive.google.com/file/d/0B6LsdZetdypkWnBJVDJ5U3l4UFU (раньше я пытался сделать эти данные воспроизводимыми, но не могу понять, как это сделать) my_gbm_model‹-gbm.step (данные = образцы, gbm.x = 1: 6, gbm.y = 7, family = "bernoulli", tree.complexity = 2, learning.rate = 0,01, bag.fraction = 0,5))
gbm
мы не можем воспроизвести график самостоятельно, поэтому мы не можем помочь вам устранить неполадки. Ноaxis(side=1,lwd=8)
никогда не следует передавать функции в качестве параметра. Это отдельная функция, которая должна вызываться после вызоваplot()
: например,plot(1:3, 1:3, xaxt="n"); axis(1, lwd=7)
. Но уgbm.plot
может быть другой способ справиться с этим. - person MrFlick   schedule 03.09.2014