Проблема Facet Wrap с ggplot Rain Cloud Plot

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

Вот что у меня есть до сих пор:

my_data2 <- melt(my_data, id.vars = c("ID"), 
             measure.vars = c("Proportion.of.Disconfirmatory.Leads.Chosen","Proportion.of.Confirmatory.Leads.Chosen", "Hypothesis"), 
             variable.name = "Leads", "Hyp",
             value.name = "Proportion")

  plot3 <- ggplot(data = my_data2, aes(y = Proportion, x = Leads, fill = Leads)) +
    geom_flat_violin(position = position_nudge(x = .2, y = 0), alpha = .8) +
    geom_point(aes(y = Proportion, color = Leads), position = position_jitter(width = .15), size = .5, alpha = 0.8) +
    geom_boxplot(width = .1, guides = FALSE, outlier.shape = NA, alpha = 0.5) +
    facet_wrap(vars(Hypothesis), nrow = 2)+
    expand_limits(x = 5.25) +
    guides(fill = FALSE) +
    guides(color = FALSE) +
    scale_color_brewer(palette = "Spectral") +
    scale_fill_brewer(palette = "Spectral") +
    coord_flip() +
    theme_bw() 

  plot3

Однако я получаю эту ошибку:

"Error: At least one layer must contain all faceting variables: `Hypothesis`.
* Plot is missing `Hypothesis`
* Layer 1 is missing `Hypothesis`
* Layer 2 is missing `Hypothesis`
* Layer 3 is missing `Hypothesis`
* Layer 4 is missing `Hypothesis`" 



> dput(my_data)
structure(list(ID = c(2L, 5L, 23L, 34L, 35L, 48L, 53L, 59L, 71L, 
76L, 1L, 3L, 4L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 
17L, 18L, 19L, 20L, 21L, 22L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 
31L, 32L, 33L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 
46L, 47L, 49L, 50L, 51L, 52L, 54L, 55L, 56L, 57L, 58L, 60L, 61L, 
62L, 63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 72L, 73L, 74L, 75L, 
78L), Hypothesis = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), Sum.of.Disconfirmatory.Leads.Chosen = c(9L, 7L, 0L, 
3L, 4L, 1L, 2L, 3L, 6L, 3L, 2L, 3L, 5L, 3L, 4L, 3L, 3L, 5L, 0L, 
5L, 5L, 1L, 4L, 5L, 6L, 4L, 5L, 2L, 6L, 4L, 6L, 1L, 4L, 4L, 8L, 
3L, 4L, 2L, 5L, 2L, 4L, 7L, 1L, 1L, 2L, 3L, 5L, 2L, 5L, 8L, 0L, 
5L, 4L, 7L, 3L, 4L, 6L, 1L, 1L, 4L, 4L, 8L, 7L, 3L, 4L, 6L, 2L, 
5L, 2L, 5L, 5L, 8L, 2L, 4L, 5L, 7L), Sum.of.Confirmatory.Leads.Chosen = c(5L, 
2L, 2L, 2L, 8L, 3L, 4L, 5L, 4L, 2L, 4L, 6L, 3L, 7L, 4L, 3L, 2L, 
3L, 3L, 7L, 4L, 5L, 2L, 3L, 6L, 4L, 9L, 6L, 5L, 5L, 1L, 1L, 3L, 
6L, 6L, 3L, 7L, 1L, 2L, 3L, 6L, 8L, 2L, 2L, 6L, 9L, 5L, 6L, 5L, 
4L, 6L, 6L, 2L, 3L, 2L, 5L, 6L, 4L, 5L, 4L, 5L, 4L, 5L, 7L, 4L, 
5L, 4L, 4L, 3L, 5L, 5L, 7L, 6L, 4L, 3L, 7L), Proportion.of.Disconfirmatory.Leads.Chosen = c(64.28571429, 
77.77777778, 0, 60, 33.33333333, 25, 33.33333333, 37.5, 60, 60, 
33.33333333, 33.33333333, 62.5, 30, 50, 50, 60, 62.5, 0, 41.66666667, 
55.55555556, 16.66666667, 66.66666667, 62.5, 50, 50, 35.71428571, 
25, 54.54545455, 44.44444444, 85.71428571, 50, 57.14285714, 40, 
57.14285714, 50, 36.36363636, 66.66666667, 71.42857143, 40, 40, 
46.66666667, 33.33333333, 33.33333333, 25, 25, 50, 25, 50, 66.66666667, 
0, 45.45454545, 66.66666667, 70, 60, 44.44444444, 50, 20, 16.66666667, 
50, 44.44444444, 66.66666667, 58.33333333, 30, 50, 54.54545455, 
33.33333333, 55.55555556, 40, 50, 50, 53.33333333, 25, 50, 62.5, 
50), Proportion.of.Confirmatory.Leads.Chosen = c(35.71428571, 
22.22222222, 100, 40, 66.66666667, 75, 66.66666667, 62.5, 40, 
40, 66.66666667, 66.66666667, 37.5, 70, 50, 50, 40, 37.5, 100, 
58.33333333, 44.44444444, 83.33333333, 33.33333333, 37.5, 50, 
50, 64.28571429, 75, 45.45454545, 55.55555556, 14.28571429, 50, 
42.85714286, 60, 42.85714286, 50, 63.63636364, 33.33333333, 28.57142857, 
60, 60, 53.33333333, 66.66666667, 66.66666667, 75, 75, 50, 75, 
50, 33.33333333, 100, 54.54545455, 33.33333333, 30, 40, 55.55555556, 
50, 80, 83.33333333, 50, 55.55555556, 33.33333333, 41.66666667, 
70, 50, 45.45454545, 66.66666667, 44.44444444, 60, 50, 50, 46.66666667, 
75, 50, 37.5, 50)), class = "data.frame", row.names = c(NA, -76L
))

> head(my_data)
  ID Hypothesis Sum.of.Disconfirmatory.Leads.Chosen Sum.of.Confirmatory.Leads.Chosen
1  2          0                                   9                                5
2  5          0                                   7                                2
3 23          0                                   0                                2
4 34          0                                   3                                2
5 35          0                                   4                                8
6 48          0                                   1                                3
  Proportion.of.Disconfirmatory.Leads.Chosen Proportion.of.Confirmatory.Leads.Chosen
1                                   64.28571                                35.71429
2                                   77.77778                                22.22222
3                                    0.00000                               100.00000
4                                   60.00000                                40.00000
5                                   33.33333                                66.66667
6                                   25.00000                                75.00000

Подозреваю, что неправильно ввел в код переменную Hypothesis, однако понятия не имею, где и как! Я пытался включить его в sumld, однако при этом получаю эту ошибку: Ошибка в fs[[1]](x,...) : попытка применить нефункцию

Заранее всем спасибо за помощь.

Можете ли вы предоставить минимальный рабочий пример, используйте dput, чтобы предоставить нам mydata.

George 14.03.2019 04:14

Привет Джордж, спасибо за ваш ответ. Не могли бы вы предоставить более подробную информацию о том, как я это делаю? Мне просто добавить dput(my_data) в мой скрипт? Пожалуйста, извините мое невежество!

Bronte 14.03.2019 04:45

вам не нужно добавлять dput к вашему примеру. Если вы запустите dput(mydata), это обеспечит структуру данных. Если не слишком большой, вы можете вставить это в свой пример. Если это массивно, тогда подмножьте mydata, чтобы было минимальное количество данных для воспроизведения вашей ошибки. Не беспокойтесь о невежестве, оно есть у всех.

George 14.03.2019 04:48
Посмотреть здесь при создании воспроизводимого вопроса R. Прямо сейчас у нас нет выборки ваших данных, и мы не можем видеть ваш график, поэтому мы не можем помочь вам подробностями.
camille 14.03.2019 04:50

Спасибо Джордж и Камилла. Я попытался это сделать и добавил в свой пример. Пожалуйста, дайте мне знать, если я сделал это неправильно (учусь на ходу!), и еще раз спасибо.

Bronte 14.03.2019 05:03

Спасибо за данные, так намного проще. Я в замешательстве: данные, которые вы рисуете, это my_data2, а my_data2 не имеет столбца с именем "Hypothesis". Так что на самом деле не с чем сравнивать... возможно, вы хотите включить "Hypothesis" как id.var, а не как measure.var?

Gregor Thomas 14.03.2019 05:09

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

Gregor Thomas 14.03.2019 05:11

Также трудно сказать, потому что в предоставленном вами образце данных есть Hypothesis = 0 в каждой строке. Если вам нужна дополнительная помощь, предоставьте dput образец данных с обоими значениями Hypothesis.

Gregor Thomas 14.03.2019 05:15

Привет Грегор. Спасибо за помощь. Я обновил код примера, включив в него Hypothesis = 1. Это настолько странно, что Hypothesis не находится в my_data2 (она определенно была раньше, но я думаю, что я слишком сильно изменил код, пытаясь исправить эту проблему, и я не знаю, что я сделал!).

Bronte 14.03.2019 05:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
254
1

Ответы 1

Гипотеза не является независимым столбцом в вашем объединенном фрейме данных mydata2 и не может использоваться для огранки. Вы включили Гипотеза в measure.vars, и он был преобразован в одну из категорий Ведет в mydata2.

my_data2 %>% group_by(Leads) %>% summarize(n=n())
# A tibble: 3 x 2
  Leads                                          n
  <fct>                                      <int>
1 Proportion.of.Disconfirmatory.Leads.Chosen    76
2 Proportion.of.Confirmatory.Leads.Chosen       76
3 Hypothesis                                    76

Если вы хотите использовать его для огранки, вместо этого включите Гипотеза в id.vars.

my_data2 <- melt(my_data, id.vars = c("ID", "Hypothesis"), 
                 measure.vars = c("Proportion.of.Disconfirmatory.Leads.Chosen",
                                  "Proportion.of.Confirmatory.Leads.Chosen"), 
                 variable.name = "Leads",
                 value.name = "Proportion")

head(my_data2)
  ID Hypothesis                                      Leads Proportion
1  2          0 Proportion.of.Disconfirmatory.Leads.Chosen   64.28571
2  5          0 Proportion.of.Disconfirmatory.Leads.Chosen   77.77778
3 23          0 Proportion.of.Disconfirmatory.Leads.Chosen    0.00000
4 34          0 Proportion.of.Disconfirmatory.Leads.Chosen   60.00000
5 35          0 Proportion.of.Disconfirmatory.Leads.Chosen   33.33333
6 48          0 Proportion.of.Disconfirmatory.Leads.Chosen   25.00000

Теперь вы можете использовать Гипотеза для огранки:

library(ggplot2)
source("https://gist.githubusercontent.com/benmarwick/2a1bb0133ff568cbe28d/raw/fb53bd97121f7f9ce947837ef1a4c65a73bffb3f/geom_flat_violin.R")

plot3 <- ggplot(data = my_data2, aes(y = Proportion, x = Leads, fill = Leads)) +
  geom_flat_violin(position = position_nudge(x = .2, y = 0), alpha = .8) +
  geom_point(aes(y = Proportion, color = Leads), 
             position = position_jitter(width = .15), size = .5, alpha = 0.8) +
  geom_boxplot(width = .1, guides = FALSE, outlier.shape = NA, alpha = 0.5) +
  facet_wrap(~Hypothesis, nrow = 2) +
  expand_limits(x = 5.25) +
  guides(fill = FALSE) +
  guides(color = FALSE) +
  scale_color_brewer(palette = "Spectral") +
  scale_fill_brewer(palette = "Spectral") +
  coord_flip() +
  theme_bw() 

plot3

Привет Джорк, большое спасибо за вашу помощь. Я знал, что это будет так же просто, как поставить переменную не в то место! Спасибо еще раз.

Bronte 14.03.2019 22:29

Привет всем, возможно ли изменить имена переменных (на «Подтверждающие выбранные лиды», а не на «Пропорция.оф.Подтверждающих.лидов.Выбранных»? В настоящее время я могу изменить только метки осей x и y (или метки легенды). Спасибо.

Bronte 15.03.2019 00:21

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