График с двумя значениями в виде точек и среднего значения с другой формой - PullRequest
1 голос
/ 20 марта 2019

Проблема:

Я не могу найти правильный способ построить график со значениями из заданной переменной с точками и изобразить значение среднего с другой другой формой. Пока что я нахожу способ сделать это, но среднее значение появляется в цветовой легенде, и это то, чего я не хочу. Как я могу получить желаемый результат? Должен ли я использовать stat_summary?

ПРИМЕЧАНИЕ. Переменные должны быть упорядочены по среднему значению среди групп по мультиморбидности (если это важно для предлагаемого решения), поэтому я использую reorder_within и scale_x_reordered.

source("https://raw.githubusercontent.com/dgrtwo/drlib/master/R/reorder_within.R")
library(tidyverse)

foo %>% 
  group_by(multimorbidity, variables) %>% 
  mutate(Mean = mean(varimportance),
         aux_mean = Mean) %>% 
  ungroup() %>% 
  spread(Gender, varimportance) %>% 
  gather(Gender, varimportance, -multimorbidity, -variables, -aux_mean) %>%
  mutate(type = if_else(Gender %in% c("Male", "Female"), "Gender", "Mean")) %>%
  ggplot(aes(reorder_within(variables, aux_mean, multimorbidity), varimportance, 
                color = Gender, shape = type)) +
  geom_point() +
  scale_x_reordered() +
  scale_shape_manual(values = c(21, 24)) +
  coord_flip() +
  facet_wrap(multimorbidity~., scales = "free")

Создано в 2019-03-20 пакетом представ. (v0.2.1)

Желаемый вывод:

enter image description here

dput для foo:

foo <- structure(list(
      Gender = c(
        "Male", "Male", "Male", "Male", "Male",
        "Female", "Female", "Female", "Female", "Female", "Female", "Female",
        "Female", "Female", "Female", "Male", "Male", "Male", "Male",
        "Male"
      ), multimorbidity = c(
        "Yes", "Yes", "Yes", "Yes", "Yes",
        "No", "No", "No", "No", "No", "Yes", "Yes", "Yes", "Yes", "Yes",
        "No", "No", "No", "No", "No"
      ), variables = c(
        "bmi", "income",
        "soccap", "alternattr", "occhaz", "bmi", "income", "soccap",
        "alternattr", "occhaz", "bmi", "income", "soccap", "alternattr",
        "occhaz", "bmi", "income", "soccap", "alternattr", "occhaz"
      ),
      varimportance = c(
        73.1234145437324, 51.0029811829917, 100,
        0, 90.9926659603591, 81.1949541852942, 48.2402164701156,
        100, 0, 9.10509052698692, 66.7759248406279, 31.69991730502,
        100, 4.7914221037359, 93.4636133674693, 70.8853809607131,
        75.004433319282, 100, 0, 43.7326141975936
      )
    ), class = c(
      "tbl_df",
      "tbl", "data.frame"
    ), row.names = c(NA, -20L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...