【发布时间】:2022-01-20 15:07:20
【问题描述】:
使用ggplot2,我可以创建一个带有重叠点的小提琴图,并且可以使用geom_line()连接成对的点。
library(datasets)
library(ggplot2)
library(dplyr)
iris_edit <- iris %>% group_by(Species) %>%
mutate(paired = seq(1:length(Species))) %>%
filter(Species %in% c("setosa","versicolor"))
ggplot(data = iris_edit,
mapping = aes(x = Species, y = Sepal.Length, fill = Species)) +
geom_violin() +
geom_line(mapping = aes(group = paired),
position = position_dodge(0.1),
alpha = 0.3) +
geom_point(mapping = aes(fill = Species, group = paired),
size = 1.5, shape = 21,
position = position_dodge(0.1)) +
theme_classic() +
theme(legend.position = "none",
axis.text.x = element_text(size = 15),
axis.title.y = element_text(size = 15),
axis.title.x = element_blank(),
axis.text.y = element_text(size = 10))
see 包包括 geom_violindot() 函数,用于在其组成点旁边绘制一个减半的小提琴图。我发现这个功能在绘制大量点时很有帮助,这样小提琴就不会被遮挡。
library(see)
ggplot(data = iris_edit,
mapping = aes(x = Species, y = Sepal.Length, fill = Species)) +
geom_violindot(dots_size = 0.8,
position_dots = position_dodge(0.1)) +
theme_classic() +
theme(legend.position = "none",
axis.text.x = element_text(size = 15),
axis.title.y = element_text(size = 15),
axis.title.x = element_blank(),
axis.text.y = element_text(size = 10))
现在,我想将geom_line() 添加到geom_violindot() 以连接成对点,如第一张图片所示。理想情况下,我希望点在里面,小提琴在外面,这样线条就不会与小提琴相交。 geom_violindot() 包含 flip 参数,它采用一个数字向量来指定要翻转的几何图形。
ggplot(data = iris_edit,
mapping = aes(x = Species, y = Sepal.Length, fill = Species)) +
geom_violindot(dots_size = 0.8,
position_dots = position_dodge(0.1),
flip = c(1)) +
geom_line(mapping = aes(group = paired),
alpha = 0.3,
position = position_dodge(0.1)) +
theme_classic() +
theme(legend.position = "none",
axis.text.x = element_text(size = 15),
axis.title.y = element_text(size = 15),
axis.title.x = element_blank(),
axis.text.y = element_text(size = 10))
如您所见,调用flip 会反转小提琴的一半,但不会反转对应的点。 see documentation 似乎没有解决这个问题。
问题
- 如何创建带有成对点的
geom_violindot()图,从而使连接它们的点和线“夹在”小提琴两半之间?我怀疑有一个使用David Robinson'sGeomFlatViolinfunction 的解决方案,虽然我还没有弄清楚。 - 在最后一个图中,请注意线条相对于它们连接的点是倾斜的。应该为
position_dots和position参数提供什么位置调整函数以使点和线正确对齐?
【问题讨论】:
-
虽然这不是您想听到的答案,但这可能是值得考虑的事情。不要追求这种可视化的想法。它令人困惑,令人费解,而且故事没有得到很好的体现。您尝试将成对的观察结果和数据的估计分布结合起来。还有其他选择。在您的示例中:在散点图中显示配对数据(每个物种在其自己的连续轴上),对于估计的分布显示例如 iso 等高线(例如 stat_density_2d)
-
@tjebo 感谢您的评论,我可以理解可能有更好的方法来表示此类数据。如果您想写一个答案来解释您的方法作为框架挑战,我可能会在没有其他答案的情况下接受它
-
@acvill:可视化的目标是什么?
-
@tjebo 我有数百个特定类型的短基因组特征。我有两种治疗的这些特征的转录组学数据。我想显示治疗之间每个特征的 RPKM 的相对变化。我还想表明,这种特征类型的治疗之间的平均 RPKM 通常会发生变化。我知道这个案例的经典可视化是火山图,但我想显示 RPKM 而不是倍数变化/p 值。
标签: r ggplot2 violin-plot