name R-упорядочение в коробке




r plot y axis name (2)

Я пытаюсь создать серию ячеек в R, которые сгруппированы по двум факторам. Мне удалось сделать сюжет, но я не могу получить коробки в правильном направлении.

Моя ферма данных, которую я использую, выглядит так:

Nitrogen    Species    Treatment
2           G          L
3           R          M
4           G          H
4           B          L
2           B          M
1           G          H

Я старался:

boxplot(mydata$Nitrogen~mydata$Species*mydata$Treatment)

это упорядочило коробки в алфавитном порядке (первые три были «высокими» обработками, затем в течение трех этих случаев они были упорядочены по названию вида в алфавитном порядке).

Я хочу, чтобы в блоке был задан параметр Low> Medium> High, а затем в каждой из этих групп G> R> B для вида.

Поэтому я попытался использовать коэффициент в формуле:

f = ordered(interaction(mydata$Treatment, mydata$Species), 
            levels = c("L.G","L.R","L.B","M.G","M.R","M.B","H.G","H.R","H.B")

затем:

boxplot(mydata$Nitrogen~f)

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

Я вытащил каждый набор данных и построил их все отдельно:

lg = mydata[mydata$Treatment="L" & mydata$Species="G", "Nitrogen"]
mg = mydata[mydata$Treatment="M" & mydata$Species="G", "Nitrogen"]
hg = mydata[mydata$Treatment="H" & mydata$Species="G", "Nitrogen"]
etc ..

boxplot(lg, lr, lb, mg, mr, mb, hg, hr, hb)

Это дает то, что я хочу, но я бы предпочел сделать это более элегантным способом, поэтому мне не нужно вытаскивать каждый из них отдельно для больших наборов данных.

Загружаемые данные:

mydata <-
structure(list(Nitrogen = c(2L, 3L, 4L, 4L, 2L, 1L), Species = structure(c(2L, 
3L, 2L, 1L, 1L, 2L), .Label = c("B", "G", "R"), class = "factor"), 
    Treatment = structure(c(2L, 3L, 1L, 2L, 3L, 1L), .Label = c("H", 
    "L", "M"), class = "factor")), .Names = c("Nitrogen", "Species", 
"Treatment"), class = "data.frame", row.names = c(NA, -6L))

Следующие команды создадут необходимые вам заказы, переработав факторы «Обработка и вид» с явным ручным упорядочением уровней:

mydata$Treatment = factor(mydata$Treatment,c("L","M","H"))

mydata$Species = factor(mydata$Species,c("G","R","B"))

edit 1 : oops Я установил его в HML вместо LMH. крепления.

2: какой фактор (X, Y) делает:

Если вы запустили коэффициент (X, Y) по существующему коэффициенту, он использует упорядочение значений в Y для перечисления значений, присутствующих в коэффициенте X. Ниже приведены некоторые примеры с вашими данными.

> mydata$Treatment
[1] L M H L M H
Levels: H L M
> as.integer(mydata$Treatment)
[1] 2 3 1 2 3 1
> factor(mydata$Treatment,c("L","M","H"))
[1] L M H L M H                               <-- not changed
Levels: L M H                                 <-- changed
> as.integer(factor(mydata$Treatment,c("L","M","H")))
[1] 1 2 3 1 2 3                               <-- changed

Он НЕ изменяет то, что фактор выглядит на первый взгляд, но он изменяет способ хранения данных.

Важно то, что многие функции графика будут отображать самую низкую нумерацию слева, затем следующую и т. Д.

Если вы создаете факторы, просто используя factor(X) то обычно перечисление основано на алфавитном порядке уровней факторов (например, «H», «L», «M»). Если ваши метки имеют обычный порядок, отличный от алфавитного (т.е. «H», «M», «L»), это может сделать ваши графики странными.

На первый взгляд может показаться, что проблема связана с упорядочением данных в кадре данных - то есть, если бы мы могли разместить все «H» наверху и «L» внизу, то это сработало бы. Это не так. Но если вы хотите, чтобы ваши ярлыки отображались в том же порядке, что и первое вхождение в данные, вы можете использовать эту форму:

 mydata$Treatment = factor(mydata$Treatment, unique(mydata$Treatment))

Этот ранее вопрос показывает, как изменить порядок boxplot на основе числового значения; то, что вам нужно здесь, вероятно, это просто переход от factor к ordered типу. Но трудно сказать, поскольку у нас нет ваших данных, и вы не представили воспроизводимый пример.

Редактирование. Используя набор данных, который вы разместили в переменной md и полагаясь на решение, на которое я указал ранее, мы получаем

R> md$Species <- ordered(md$Species, levels=c("G", "R", "B"))
R> md$Treatment <- ordered(md$Treatment, levels=c("L", "M", "H"))
R> with(md, boxplot(Nitrogen ~ Species * Treatment))

который создает диаграмму, которую вы хотели создать.

Это также эквивалентно другому решению, представленному здесь.