在R ggplot2中为同一因素内的每个点显示不同符号

4
我想创建一个图表,显示每个组(由因素组织)内计算值的均值,以及各自的单独点。我已经成功地做到了这一点,但所有点都使用相同的符号。我希望在每个因子内的每个点具有不同的符号,并且最好按照相同的顺序使用相同的点来表示每个因子。
下面是我目前正在制作的图表的示例版本,但同一列中的所有点都使用相同的符号。
我考虑使用点的行号来定义符号形状,但我认为默认的ggplot2软件包中只有25种不同的形状可用,并且我的真实数据有超过25个点,此外,我更喜欢在每列中使用相同的点,以保持图表的一致性。
Mean_list <- data.frame(Cells = factor(c("Celltype1", "Celltype2", "Celltype3", 
                        "Celltype4"), 
                        levels =c("Celltype1", "Celltype2", "Celltype3", "Celltype4")),
                        Mean = c(mean(c(1, 2, 3)), mean(c(5, 8, 4)), mean(c(9, 8 ,3)), 
                        mean(c(3, 6, 8, 5))))

values_list <- data.frame(Cells2 = rep(c("Celltype1", "Celltype2", "Celltype3", 
                         "Celltype4"), times = c(length(c(1, 2, 3)),
                         length(c(5, 8, 4)), length(c(9, 8 ,3)), 
                         length(c(3, 6, 8, 5)))), 
                         values =  c(1, 2, 3, 5, 8, 4, 9, 8, 3, 3, 6, 8, 5))

ggplot() + geom_col(data = Mean_list, aes(Cells, Mean, fill = Cells)) +
  geom_point(data = values_list, aes(Cells2, values)) 

考虑到每列中的点数,我会考虑用标签(比如AA-ZZ)完全替换这些点。 - iod
1个回答

2
在绘图之前,我们可以为单元格内的每一行分配一个编号:
values_list <- values_list %>% group_by(Cells2) %>% mutate(shape = factor(seq_along(values)))

ggplot() +
  geom_col(data = Mean_list, aes(Cells, Mean, fill = Cells)) +
  geom_point(data = values_list, aes(Cells2, values, shape = shape))

enter image description here


谢谢,这个方法可以很好地为每个点获取不同的符号,但我更希望符号与列表中值的位置相关,而不是它们的排名。例如,在上面的示例中,“Celltypes1”中的“1”,“Celltypes2”中的“5”,“Celltypes3”中的“9”和“Celltypes4”中的“3”都应该是相同的形状,而不管它们的值如何。 - Phil D
谢谢,这个方法可行!比我最初尝试的不使用dplyr包要简单得多。 - Phil D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接