Как использовать ggplot2 geom_dotplot() как с заполнением, так и с группой
Мне очень нравится, как ggplot2::geom_dotplot()
может красиво складывать точки в середину категории, но я не могу совмещать это с цветом заливки.
Давайте рассмотрим пример:
# test data
tmpData <- data.frame(x=c(rep('x', 3),rep('y', 3)), y=c(1,1,2,1,2,2), fill=rep(c('A', 'B', 'B'), 2))
# Plot without fill color
ggplot(tmpData, aes(x=x, y=y)) +
geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4)
Результат на этом рисунке:
![Dotplot without color]()
Но когда я добавляю аргумент fill:
ggplot(tmpData, aes(x=x, y=y, fill=fill)) +
geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4)
Заполнение, похоже, перезаписывает группировку, сделанную на "x", в результате чего две точки (x, 1) (x, 1) будут свернуты. Я хотел бы, чтобы они имели разные цвета.
![Dotplot with color]()
Когда я пытаюсь указать группу, цвет заливки игнорируется:
ggplot(tmpData, aes(x=x, y=y, group=x, fill=fill)) +
geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4)
![Dotplot with group specified]()
Коллапс, похоже, можно избежать, включив группы стека:
ggplot(tmpData, aes(x=x, y=y, fill=fill)) +
geom_dotplot(binaxis = "y", stackgroups=TRUE, stackdir = "center", dotsize=4)
![dotpoot with stackgroups]()
Но затем я теряю центрирование данных на "x" и "y", которые находятся на других 3 графиках.
Есть ли способ использовать geom_dotplot()
для обеих групп и заполнить?
Ответы
Ответ 1
Если вы открыты для немного хакерского решения, просто чтобы получить его, как вы хотите, чтобы он выглядел... Вы можете перезаписать команду заливки, просто предоставив ей вектор имен цветов:
tmpData$colorname <- rep(c('red','blue','blue'),2)
ggplot(tmpData, aes(x=x, y=y)) +
geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4, fill=tmpData$colorname)
![введите описание изображения здесь]()
Ответ 2
Я думаю, вы должны добавить аргумент position = "dodge"
:
ggplot(tmpData, aes(x = x, y = y, fill = fill,)) +
geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 4, position = "dodge")
![enter image description here]()