geom_dotplot заполнение эстетических изменений группировка данных

#r #ggplot2

Вопрос:

Добавление переменной заполнения geom_dotplot вводит нежелательную группировку в геом. Вот поведение, когда вы не добавляете переменную заполнения:

 library(tidyverse)

mtcars %>%
 ggplot(
   aes(
     factor(vs), mpg
   )
 )  
 geom_dotplot(
   stackdir = "center", 
   binaxis = "y", 
   fill = "white"
 )  
 coord_flip()
 

ВОЗВРАТ

нет точечной диаграммы заполнения

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

 mtcars %>%
  rownames_to_column %>% 
  mutate(
    merc = rowname %>%
      str_detect("Merc ") %>%
      as.numeric %>%
      factor
  ) %>% 
  ggplot(
    aes(
      factor(vs), mpg, fill = merc
    )
  )  
  geom_dotplot(
    stackdir = "center", 
    binaxis = "y", 
  )  
  coord_flip()  
  theme(
    legend.position = "none"
  )
 

ВОЗВРАТ

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

Я хочу, чтобы точки оставались там, где они есть на первом графике, но вводили эстетику заливки. Возможно ли это в geom_dotplot ?

Комментарии:

1. Дело в том, что geom_dotplot делает некоторый подсчет на основе групповой переменной, а с группой merc (1 против 0) статистика меняется, поэтому у вас не может быть такого же графика, как без группировки. Надеюсь, я объясню это достаточно ясно.

2. Он не будет идентичным, но вы можете захотеть binpositions = "all", , чтобы параметр geom_dotplot был более похож на ваш оригинал.

3. @JonSpring — это огромное улучшение. если вы напишете это как ответ, я приму его.

Ответ №1:

geom_dotplot Здесь могут быть полезны два варианта:

бинарные позиции

Когда метод «плотность точек», «по группам» (по умолчанию) определяет позиции ячеек для каждой группы отдельно. «все» определяет позиции ячеек со всеми данными, взятыми вместе; это используется для выравнивания стеков точек по нескольким группам.

группы стека

следует ли расставлять точки по группам? Это имеет эффект, который должен иметь position = «стек», но не может (потому что эта геометрия имеет некоторые странные свойства).

 ...   geom_dotplot(alpha = 0.6,   # for testing to show overplotting - none here
                   binpositions = "all", 
                   stackgroups = TRUE,  # to avoid overplotting
                   stackdir = "center", 
                   binaxis = "y", 
      ) 
 

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