изменить x расположение скрипки в ggplot2 - PullRequest
0 голосов
/ 02 июля 2018

Я пытался создать сюжет скрипки, используя непрерывную переменную, размеченную по 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 расположена одинаково, а не по значениям.

enter image description here

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Если вы оставите переменную condition как целое / числовое значение для оси x, но будете использовать ее как коэффициент для 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) )

enter image description here

0 голосов
/ 02 июля 2018

Это потому, что графики для скрипки предназначены для использования для категориальных данных по оси 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).

...