2013-02-27 4 views
2

Я использую plot в течение довольно долгого времени, и мне интересно, сколько будет разбито, если аргумент типа может переопределить категориальные предиктора. Прямо сейчас график всегда пытается использовать ящики, когда переменная x является фактором. Кажется, что метод plot.factor всегда вызывается. Было бы неплохо, если бы тип мог переопределить эту функцию, и мне не нужно было делать численную ось x, подавлять ее, а затем добавлять ее позже. Меня не интересует функция обертки, так как я довольно подробно описал, как это сделать. Мне просто интересно, есть ли аргумент plot, который я пропустил, который может решить эту проблему.Трюки для переопределения plot.factor?

Например, как правило, boxplot попытка в этом случае ...

y <- 1:4 
x <- factor(letters[1:4]) 
plot(y ~ x) 

Я бы предпочел, чтобы просто построить точки и правильно маркировать й-ось. Следующие работы, но я надеялся на более простую версию.

nx <- length(x) 
plot(y ~ 1:nx, xaxt = 'n') 
axis(1, 1:nx, x, xlab = '') 

Я надеялся, что-то вроде следующего может работать ...

plot(y ~ x, type = 'n') 
points(1:nx, y) 

, но не идти. И type = 'p' тоже этого не делает.

Я считаю, что это последняя неудача еще один пример несогласованности в R. Установка type = 'n' должны работать в вызовы методов, а также или это должно быть обязательным, чтобы все plot функции используют его (наследственные или по крайней мере, прошли через ...). Он находится в plot.default.

+0

FYI: Поведение аргумента 'type', обозначающее ошибку, является фактически документированным поведением. При описании дальнейших аргументов в «plot.factor» в документации четко сказано «None accept type». То, что вы описали, будет больше похоже на запрос функции, так как R Core добавляет аргумент типа 'boxplot' (который в конечном итоге называется). И они, вероятно, (справедливо) утверждают, что на самом деле не стоит пытаться спасти людей 1-2 лишними линиями вызова «оси». – joran

+0

Я думаю, что есть что сказать, для согласованности даже более грубо, чем лаконичность. Хорошо, да, возможно, я должен поместить его в качестве запроса функции. – John

+0

Эй, я на самом деле на твоей стороне здесь. Я думаю, что отслеживание того, какие аргументы идут, какие методы для общего типа «сюжет» могут быть более сложными, чем хотелось бы в идеале. Я просто указывал (несколько банальный) факт, что эта сложность означает, что внесение изменений может быть гораздо более эффективной, чем преимущества. – joran

ответ

4

Вы можете просто позвонить plot.default:

y<-rnorm(100) 
x<-factor(sample(c("a","b","c"),size=100,replace=TRUE)) 
plot.default(x,y) 

редактирования: Изменил уровни фактора для персонажей, так что ясно, что это работает даже тогда.

+0

+1 умный ответ! – agstudy

+0

+1 Это хорошо, но вам все равно нужно подавить ось x, а затем снова включить ее. Он не сохраняет никаких шагов, но лучше выражает намерение в коде, чем то, как я это делал. – John

+0

Теперь, когда вы обновили свой вопрос, я понимаю, что вы ищете. Да, это не помогает по оси x. Поскольку x является фактором, использующим общую функцию графика, всегда будет использоваться метод plot.factor, а с числовым y, который приведет к boxplot. ЕСЛИ это более умный способ сделать это, чем подавление и повторение оси x, я думаю, что для этого все еще требуется plot.default. –

Смежные вопросы