首页 > 解决方案 > 具有不等子组的ggplot

问题描述

之前已经提出过这个问题,但没有可重复的示例。不幸的是,我的数据集也遇到了同样的问题。我想要一些帮助。我是 R 初学者,但我试图制作一个可重复的示例。对不起,如果代码很笨重!

IND <- c(1:20)
G<- c(rep("A", 10), rep("B", 5), rep("C", 5)) 
SG1 <- c(rep("1", 3), rep("2", 2), rep("1", 2), rep("2",3), rep("3", 5), rep("4",5))
SG2 <- c(rep("1", 4), rep("2", 4), rep("3",4), rep("4", 3), rep("",5))
X <- c(7,8,9,10,11,12,11,10,11,12,25,27,29,26,28,35,36,37,38,39) 

df<- data.frame(IND, G, SG1, SG2, X)`

如上所述,我的数据框由 5 列组成:IND:个人姓名。G:3 类的主要组,即 A、B、C。SG1:子组 1、2 ......这些是 A 的子组。但是,在绘图时,我认为最好不要为 B 和 C 设置空值给他们一个号码。SG2:疾病严重程度为 1、2、3、4... 这些适用于主要组 A 和 B。 X:要绘制的值。

我正在尝试使用 ggplot 进行绘图,使得 x 轴是主组 G,y 是值 X。我想可视化箱线图,这样我会看到 SG1 故障。因此,理想情况下,A 下有 2 个箱须图。B 为 1,C 为 1。

我做到了这一点

ggplot(data = df, aes(x= G, y= X, fill= SG1))+
  geom_boxplot()

在此处输入图像描述 现在我想添加单个点以查看分布。这些点的形状应符合子组 SG1。

我试过了

ggplot(data = df, aes(x= G, y= X, fill= SG1))+
  geom_boxplot()+
  geom_point(shape= factor(SG1))

不幸的是,该点位于 A 组的 SG 1 和 2 之间。在 此处输入图像描述 理想情况下,该位置应类似于箱线图。

对此有何建议?

谢谢!

标签: rggplot2

解决方案


这应该做你想要的:

ggplot(data = df, aes(x= G, y= X, fill= SG1)) +
    geom_boxplot(position=position_dodge(width=1)) +
    geom_point(aes(shape= factor(SG1), group=factor(SG1)),
               position=position_dodge(width=1))

position_dodge默认情况下已在分组箱线图中使用。但是,您必须再次指定它以确保width(不同组的箱线图分开的距离)与geom_point.

在此处输入图像描述

 

编辑:
添加不同的形状SG2

ggplot(data = df, aes(x= G, y= X, fill= SG1))+
    geom_boxplot(position=position_dodge(width=1))+
    geom_point(aes(shape= factor(SG2), group=factor(SG1)),
                   position=position_dodge(width=1))+
    guides(shape=guide_legend(title="SG2"))

推荐阅读