r - 具有不等子组的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 之间。在 此处输入图像描述 理想情况下,该位置应类似于箱线图。
对此有何建议?
谢谢!
解决方案
这应该做你想要的:
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"))
推荐阅读
- excel - 自动化流程 - 打开多个 Web 表单,从 Excel 文件中填写
- angular - html2Canvas/jsPDF 只将视口中的数据转换为pdf?
- javascript - D3径向条形图调整半径缩放
- nlp - SpaCy NER:同一个词可以是两个不同实体的一部分吗?
- typescript - 如何计算 .ts 文件中的总行数
- django - 如何从 Django 中的模板获取用户数据?
- amazon-web-services - 如何将 EMR(Spark) 日志发送到 AWS Cloudwatch
- python - 如何去除图像的白色背景并使其透明?
- ios - 将 tableview 选择的数据存储到带有键值的数组中
- google-analytics - 当页面导航到第三方页面然后使用谷歌标签管理器进入确认页面时,如何跟踪结帐行为?