Как построить данные, сгруппированные по фактору, но не как ящик

В R задан вектор

casp6 <- c(0.9478638, 0.7477657, 0.9742675, 0.9008372, 0.4873001, 0.5097587, 0.6476510, 0.4552577, 0.5578296, 0.5728478, 0.1927945, 0.2624068, 0.2732615)

и коэффициент:

trans.factor <- factor (rep (c("t0", "t12", "t24", "t72"), c(4,3,3,3)))

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

Просто выполнение plot(trans.factor, casp6) делает почти то, что я хочу, оно создает boxplot, но я хочу видеть отдельные точки данных.

Ответ 1

require(ggplot2)
qplot(trans.factor, casp6)

Ответ 2

Вы можете сделать это с помощью ggplot2, используя facets. Когда я читаю "Я хочу создать график, в котором точки данных сгруппированы, как определено множителем", первое, что пришло мне в голову, было facets.

Но в этом конкретном случае более быстрая альтернатива должна быть:

plot(as.numeric(trans.factor), casp6)

И вы можете играть с вариантами сюжета (type, fg, bg...), но я рекомендую придерживаться ggplot2, так как он имеет гораздо более чистый код, отличную функциональность, вы можете избежать overplotting... и т.д. и т.д.

Узнайте, как бороться с факторами. Вы получили штрих-код при оценке plot(trans.factor, casp6) 'cause trans.factor был классом factor (по иронии судьбы, вы даже назвали его в такой усадьбе)... и trans.factor, как таковой, был объявлен до непрерывная (числовая) переменная внутри функции plot()... следовательно, plot() "чувствует" необходимость подмножества данных и рисования boxplot на основе каждой части (если вы сначала объявите непрерывную переменную, вы получите обычный граф, правильно?). ggplot2, с другой стороны, интерпретирует фактор по-другому... как "обычную", числовую переменную (это означает синтаксис, предоставленный Джонатаном Чангом, вы должны указать geom при выполнении чего-то более сложного в ggplot2).

Но предположим, что у вас есть одна непрерывная переменная и множитель, и вы хотите применить гистограмму для каждой части непрерывной переменной, определяемой уровнями факторов. Здесь ситуация осложняется возможностями базового графика.

# create dummy data
> set.seed(23)
> x <- rnorm(200, 23, 2.3)
> g <- factor(round(runif(200, 1, 4)))

Используя базовые графики (package:graphics):

par(mfrow = c(1, 4))
tapply(x, g, hist)

ggplot2 путь:

qplot(x, facets = . ~ g)

Попробуйте сделать это с помощью graphics в одной строке кода (точки с запятой и пользовательские функции считаются обманом!):

qplot(x, log(x), facets = . ~ g)

Надеюсь, что я не утомил тебя до смерти, но помог тебе!

С уважением,
aL3xa

Ответ 4

Возможно, вы сможете приблизиться к тому, что хотите, используя графику решетки:

library(lattice)    
xyplot(casp6 ~ trans.factor, 
       scales = list(x = list(at = 1:4, labels = levels(trans.factor))))

Ответ 5

Я думаю, что там лучшее решение (я написал его для семинара несколько дней назад), но это сошло с ума. Здесь уродливая замена базовой графикой. Не стесняйтесь аннотировать ось x ad libitum. Лично мне нравится решение Грега.

plot(0, 0, xlim = c(1, 4), ylim = range(casp6), type = "n")
points(casp6 ~ trans.factor)

Ответ 6

Не требуется дополнительный пакет

Я немного опаздываю на вечеринку, но обнаружил, что вы можете легко получить желаемый результат со стандартной функцией построения графика - просто преобразуйте коэффициент в числовое значение:

plot(as.numeric(trans.factor), casp6)