R中ggplot2的dotplot中的点未对齐

时间:2018-10-02 13:04:57

标签: r ggplot2

我不明白为什么ID 2,6,8,10的点不会像在1,3,4,7,9中那样垂直对齐。

偏移量受堆栈比的影响,但是为什么它不影响所有组?

ggplot(sleep, 
       aes(x=ID,fill=group,y=extra))+
  geom_dotplot(binaxis = 'y',
               method="histodot",
               stackgroups = TRUE,
               binpositions="bygroup",
               stackratio=1,
               binwidth=0.1, 
               stackdir = "center",
               dotsize = 3)

plot

另一个例子是

ggplot(mtcars, aes(x = factor(am),fill = factor(cyl), y = mpg)) +
  geom_dotplot(binaxis = "y",stackgroups = TRUE, stackdir = "center", binpositions="all")

stackgroups = TRUE在这里使所有内容变得怪异。

img

可以在这里做些什么,还是有另一种方法来获取山姆?

2 个答案:

答案 0 :(得分:0)

我无法告诉您使用div { width: 100%; } 函数时出了什么问题,但是您可以通过使用geom_point和选项geom_dotplot来获得所需的内容。在函数position = position_dodge2()中,您可以使用position_dodge2()控制每个点的位置。请参阅下面的完整代码:

width

结果:

enter image description here


更新

我们在同一X轴上可以有不同的对齐方式。例如,当ID = 1时,我可以移动第2组的点,同时保持第1组的点:

enter image description here

代码:

library(ggplot2)

ggplot(sleep, 
       aes(x=ID,fill=group,y=extra))+
  geom_point(
    size=3,
    pch = 21,
    position = position_dodge2(width=c(rep(0.00001,4),
                                       0.2,
                                       rep(0.00001,5)))
  ) + 
  scale_y_continuous(limits = c(-2,6)) +
  theme_classic() + 
  theme(panel.grid.major.x = element_line(color="gray",
                                          linetype = "dashed"))

答案 1 :(得分:0)

geom_dotplot似乎像所有点都在一组中一样计算“躲避”位置,然后在每组中绘制它们。

我找到了解决方法。 在这里,我作图并自己给圆点上色。该ggplot无法为其创建图例,因此我制作了另一幅图,它是正确的图例。 然后使用plot_grid制作我的最终剧情。 正确设置键很重要,否则绘图的颜色将不正确。

mycars <- as.data.table(mtcars)
mycars[cyl=="4",mycol:="red"][cyl=="6",mycol:="green"][cyl=="8",mycol:="blue"]
setkey(mycars,am,mpg)
myplot <- ggplot(mycars, aes(x = factor(am), y = mpg)) +
  geom_dotplot(binaxis = "y",
               fill=mycars$mycol,
               stackratio=1,
               binwidth=0.7, drop=FALSE,
               stackdir = "center",
               dotsize = 1)

lplot <- ggplot(mtcars, aes(x = factor(am),fill = factor(cyl), y = mpg))+
  geom_dotplot(binaxis = "y",stackgroups = TRUE)+
  scale_fill_manual(values=c("red","green", "blue"))
mylegend <- get_legend(lplot)

plot_grid(myplot,mylegend,ncol=2,rel_widths =  c(6,1))

Plot