(R) Ширина оси в gbm.plot

Надеясь на некоторые указатели или некоторое понимание опыта, поскольку я буквально схожу с ума по этому поводу, я пытался в течение 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))


person dez93_2000    schedule 03.09.2014    source источник
comment
Разместите воспроизводимый пример. (Я попытался создать его с помощью виньетки и после нескольких шагов получил ошибки. Кажется, вы уклоняетесь от своих обязанностей здесь.)   -  person IRTFM    schedule 03.09.2014
comment
Без образца объекта 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
comment
Часто, когда вы тратите время на создание минимального воспроизводимого примера, вы можете легко найти ошибку самостоятельно. Если не сделать этого до публикации вопроса, это будет пустой тратой времени. Ключевые слова минимальны и воспроизводимы. Часто справочные страницы R являются отличной отправной точкой для таких примеров. Это базовый навык, который вы должны развивать независимо от того, на каком языке вы программируете.   -  person MrFlick    schedule 03.09.2014
comment
ура за помощь ребята. MrFlick: в принципе да, но я пробовал это в прошлый раз и потратил 2 часа на отладку, почему моя попытка создать минимальный аналог моих основных данных не запустилась в gbm. Те же минимальные/максимальные значения, аналогичные средства, те же n и т. д. Я просто надеялся, что кто-нибудь увидит код и скажет: «О да, вам нужен laxt() или что-то в этом роде».   -  person dez93_2000    schedule 03.09.2014
comment
Что ж, у меня было хорошо, почему бы вам просто не сделать ... X в импульсе, но я предпочитаю проверять свои ответы. Я слишком много раз обжигался на собственных ошибках. Вы должны быть в состоянии построить рабочий пример из виньетки проще, чем я.   -  person IRTFM    schedule 03.09.2014
comment
Извини, чувак, я действительно бьюсь о стены. Погуглил виньетки, предположил, что это дополнительная информация, так что это [cran.r-project.org/web/packages/dismo/vignettes/brt.pdf] и этот [cran.r-project.org/web/packages/dismo/vignettes/sdm.pdf] из этого [cran.r-project.org/web/packages/dismo/index.html]? Ни то, ни другое не имеет ничего полезного; пожалуйста, дайте мне знать, если я неправильно истолковываю виньетку. И эй, если у вас все еще есть эта догадка, во что бы то ни стало выбросьте ее.   -  person dez93_2000    schedule 03.09.2014


Ответы (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()

введите здесь описание изображения

person IRTFM    schedule 03.09.2014
comment
Ваше здоровье. Такое ощущение, что gbm.plot вызывает странное поведение. У меня будет тест, когда я встану. - person dez93_2000; 03.09.2014
comment
Я не думаю, что стал бы винить gbm.plot. Он передает большинство параметров построения графика, а также большинство жестко запрограммированных функций построения графика. В базовых функциях построения графиков нет различий между lwd и lwd.line. - person IRTFM; 03.09.2014
comment
Спасибо за помощь. Сделав дополнительные строки axis() и удалив существующие, метки осей увеличились всего на 20%. Это заставило меня снова изучить функцию, и я понял, что gbm.plot - это просто причудливая оболочка над plot.gbm, поэтому я не вызываю ее напрямую. К сожалению, теперь я не могу УДАЛИТЬ метки Yaxis, так что это следующая проблема...! - person dez93_2000; 05.09.2014