Как добавить ящики для рассеивания с дрожанием

Я использую следующие команды для создания диаграммы рассеяния с дрожанием:

ddf = data.frame(NUMS = rnorm(500), GRP = sample(LETTERS[1:5],500,replace=T))
library(lattice)
stripplot(NUMS~GRP,data=ddf, jitter.data=T)

Я хочу добавить ящики из этих точек (по одной для каждой группы). Я попытался выполнить поиск, но не смог найти код, отображающий все точки (а не только выбросы) и дрожанием. Как я могу это решить. Благодарим за помощь.

Ответы

Ответ 1

Здесь один из способов использования базовой графики.

boxplot(NUMS ~ GRP, data = ddf, lwd = 2, ylab = 'NUMS')
stripchart(NUMS ~ GRP, vertical = TRUE, data = ddf, 
    method = "jitter", add = TRUE, pch = 20, col = 'blue')

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

Ответ 2

Чтобы сделать это в ggplot2, попробуйте:

ggplot(ddf, aes(x=GRP, y=NUMS)) + 
  geom_boxplot(outlier.shape=NA) + #avoid plotting outliers twice
  geom_jitter(position=position_jitter(width=.1, height=0))

ggplot2 version of boxplot + jitter

Очевидно, вы можете настроить аргументы ширины и высоты position_jitter() по своему вкусу (хотя я бы рекомендовал height=0, так как дрожание высоты сделает ваш график неточным).

Ответ 3

Я написал функцию R с именем spreadPoints() в пакете plotteR. Пакет может быть установлен непосредственно в вашу библиотеку R с помощью следующего кода:

install.packages("devtools")
library("devtools")
install_github("JosephCrispell/plotteR")

Для приведенного примера я использовал следующий код для генерации приведенного ниже примера.

ddf = data.frame(NUMS = rnorm(500), GRP = sample(LETTERS[1:5],500,replace=T))

boxplot(NUMS ~ GRP, data = ddf, lwd = 2, ylab = 'NUMS')

spreadPointsMultiple(data=ddf, responseColumn="NUMS", categoriesColumn="GRP",
                     col="blue", plotOutliers=TRUE)

enter image description here

Это незавершенная работа (отсутствие формулы в качестве входных данных неуклюже!), Но она предоставляет неслучайный метод для распределения точек по оси X, который дублируется как скриптовая сводка данных. Посмотрите на исходный код, если вам интересно.

Ответ 4

Для решения lattice:

library(lattice)
ddf = data.frame(NUMS = rnorm(500), GRP = sample(LETTERS[1:5], 500, replace = T))
bwplot(NUMS ~ GRP, ddf, panel = function(...) {
  panel.bwplot(..., pch = "|")
  panel.xyplot(..., jitter.x = TRUE)})

Символ средней точки по умолчанию был заменен на строку с pch = "|" , Другие свойства коробки и усов можно настроить с помощью box.umbrella и box.rectangle помощью функции trellis.par.set(). Количество дрожания можно регулировать с помощью переменной с именем factor где factor = 1.5 увеличивает ее на 50%.

lattice solution to boxplot with scatter