Изменить x расположение скрипки в ggplot2

Я пытался создать сюжет скрипки, используя непрерывную переменную, разложенную по x. В настоящее время у меня значения х 0,3,5,8. Когда я рисую их как скрипку, они оказываются на одинаковом расстоянии друг от друга. Есть ли способ заставить расположение скрипок быть по существу 0,3,5,8?

Я включил некоторые примеры данных и строку, которую я пытался выполнить.

     condition movedur
 [1,]         5   0.935
 [2,]         0   1.635
 [3,]         3   0.905
 [4,]         8   0.875
 [5,]         3   1.060
 [6,]         8   1.110
 [7,]         3   1.830
 [8,]         5   1.060
 [9,]         5   1.385
[10,]         5   1.560
[11,]         0   1.335
[12,]         3   0.880
[13,]         0   1.030
[14,]         8   1.300
[15,]         3   1.230
[16,]         3   1.210
[17,]         5   1.710
[18,]         3   1.000
[19,]         0   1.365
[20,]         0   1.000

ggplot(a, aes(x = condition, y = movedur, fill = condition)) +
geom_violin()

Когда я запускаю полный код, я получаю изображение ниже. Но ось x расположена одинаково, а не значениями.

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

2 ответа

Решение

Если вы оставите condition переменная как целое / числовое значение для оси х, но использовать его как фактор для fill Вы можете получить сюжет, который вы хотите.

Обратите внимание, что приведенный вами пример набора данных уже condition как целое число, но если это фактор, и вы хотите преобразовать его, вы можете сделать

a$condition = as.numeric(as.character(a$condition))

я добавить breaks в scale_x_continuous() чтобы перерывы выглядели красиво.

ggplot(a, aes(x = condition, y = movedur, fill = factor(condition))) +
     geom_violin() +
     scale_x_continuous(breaks = c(0, 3, 5, 8) )

Это потому, что графики скрипки предназначены для использования для категориальных данных по оси X, и поэтому они просто обрабатывают различные значения condition как категории, а не значения на непрерывной оси. Чтобы получить желаемый результат, вы можете вставить отсутствующие значения, соответствующие другим значениям оси, с помощью complete как показано ниже. Обратите внимание, что вам нужно вставить factor позвонить, чтобы получить ggplot2 использовать дискретный fill масштаб.

library(tidyverse)
tbl <- structure(list(condition = c(5L, 0L, 3L, 8L, 3L, 8L, 3L, 5L, 5L, 5L, 0L, 3L, 0L, 8L, 3L, 3L, 5L, 3L, 0L, 0L), movedur = c(0.935, 1.635, 0.905, 0.875, 1.06, 1.11, 1.83, 1.06, 1.385, 1.56, 1.335, 0.88, 1.03, 1.3, 1.23, 1.21, 1.71, 1, 1.365, 1)), row.names = c(NA, -20L), class = c("tbl_df", "tbl", "data.frame"), spec = structure(list(cols = list(condition = structure(list(), class = c("collector_integer", "collector")), movedur = structure(list(), class = c("collector_double", "collector"))), default = structure(list(), class = c("collector_guess", "collector"))), class = "col_spec"))

tbl %>%
  complete(condition = 0:8) %>%
  ggplot() +
  geom_violin(aes(x = condition, y = movedur, fill = factor(condition)))
#> Warning: Removed 5 rows containing non-finite values (stat_ydensity).

Создано 2018-07-02 пакетом представлением (v0.2.0).

Другие вопросы по тегам