#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",
)