Изменить 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).