Выравнивание точек geom_jitter по оси x и обработка y как частоты

Это немного странный вопрос, но вот он ...

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

На данный момент у меня примерно так:

y <- rep(1:5, each = 4)
x <- rep(c("1", "2", "3", "4", "5"), each = 4)
df <- cbind(y, x)
df <- as.data.frame(df)
df$y <- as.numeric(df$y)

p <- ggplot(df, aes(x, y))
p + geom_jitter(shape = 4, color = 'darkred', width = 0, height = 1, size = 5, alpha = 1)

нервный сюжет

что дает мне этот сюжет.

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

Кто-нибудь знает возможно ли это?

По сути, я хочу рассматривать y как частоту в точечной диаграмме.

Большое спасибо!


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


person Con Des    schedule 11.12.2019    source источник
comment
Не могли бы вы добавить пример желаемого результата?   -  person pogibas    schedule 11.12.2019
comment
по определению geom_jitter отображает случайное положение, поэтому вы не можете это контролировать. Может быть, ты сможешь стать ближе к тому, чего хочешь, с p + geom_dotplot(binaxis = "y", stackdir = "center", fill = 'darkred', size = 5, alpha = 1)?   -  person Jrm_FRL    schedule 11.12.2019
comment
Привет, я сначала попробовал это с точечной графикой, но я не смог изменить форму с точечной графикой, поэтому выбрал другую стратегию.   -  person Con Des    schedule 12.12.2019


Ответы (1)


Вы хотите использовать для этого ggbeeswarm пакет.

library(ggplot2)
library(ggbeeswarm)

y <- rep(1:5, each = 4)
x <- rep(c("1", "2", "3", "4", "5"), each = 4)
df <- cbind(y, x)
df <- as.data.frame(df)
df$y <- as.numeric(df$y)

p <- ggplot(df, aes(x, y))
p + geom_beeswarm(shape = 4, color = 'darkred', size = 4,
                  groupOnX = F, # only swarm on Y axis
                  cex = 2) # increase space between points

Это сюжеты

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

person RoB    schedule 11.12.2019
comment
Большое спасибо, я никогда не слышал о beeswarm. Вы знаете, можно ли использовать какой-либо из аргументов для выравнивания точек по горизонтали? - person Con Des; 12.12.2019
comment
@ConDes Да, можно. Установите groupOnX в значение ИСТИНА (по умолчанию). На первой странице репозитория, на который я указал в своем ответе, есть несколько примеров, если вам нужно больше. - person RoB; 12.12.2019