在分组的小提琴图上绘制单个点

问题描述

经过大量查找后,我似乎无法找到问题的确切答案,所以我想我会问。

我想使用 ggplot2 制作具有两个条件(“Control RNAi”和“mex-6 RNAi”)的时间课程的分组小提琴图。每个数据点都来自 3 个不同的重复(数据帧中的“蠕虫”因子),因此我拥有的数据帧格式如下(“mean_mex6”是绘制的 Y 值):

mean_mex6 RNAi 时间 蠕虫
2.4102356 控制RNAi 2 小时 worm1
0.8332575 控制RNAi 2 小时 worm1
2.5093177 控制RNAi 2 小时 worm1
0.8792359 控制RNAi 2 小时 worm1
1.2570116 控制RNAi 2 小时 worm1
1.0671826 控制RNAi 2 小时 worm1

数据框中还有更多行,但我上面向您展示的数据只是来自“2hr”时间点的“Control RNAi”上的“worm1”的一些数据点。

我希望在小提琴图上绘制每个 RNAi 组中的所有单个点,但我希望绘制它们,以便每个“蠕虫”样本中的每个数据点与其他蠕虫的颜色不同。我已经能够创建一个分组的小提琴图,其中绘制了所有单独的点,但没有为每个单独的蠕虫样本进行颜色编码

library(ggplot2)

ggplot(compiled_allhours,aes(x=Time,y=mean_mex6,colour=RNAi)) + 
  geom_violin(trim=FALSE) +
  scale_x_discrete(limits=c("2hr","4hr","6hr","8hr","24hr")) + ##This chooses which data to plot and orders them
  geom_quasirandom(aes(x=Time,colour = RNAi),dodge.width = 0.9,varwidth = TRUE) +
  ggtitle(expression(paste(italic("mex-6")," nuclear signal"," - WT"))) +
  theme(plot.title = element_text(hjust = 0.5)) + ##Centers the title of the plot
  xlab("Time") +
  ylab(expression(paste("normalized ",italic("mex-6")," nuclear signal (A.U.)")))

我包含了由此产生的情节的图像。[情节 1] https://i.stack.imgur.com/yvfYW.png

如果我尝试通过蠕虫为各个点着色,则会发生以下情况:

library(ggplot2)

ggplot(compiled_allhours,colour = Worm)," nuclear signal (A.U.)")))

[情节 2] https://i.stack.imgur.com/aVJwG.png

所以基本上,我想要第二个图,但是所有这些点都合并到了小提琴图中,如第一张图所示。感谢您的帮助!

解决方法

问题在于第二个图中的 geom_violingeom_quasirandom 应用了不同的分组。因此,点和小提琴以不同的方式“躲避”并且彼此不对齐。

要获得所需的结果,您必须使用 group 美学,即使用 TimeRNAi 进行分组,例如interaction

此外,我没有将 Worm 映射到颜色上,而是将其映射到 fill(对我来说更有意义,因为 Worm 和 RNai 是不同的变量)并使用填充点 (shape=21)不同的传说。但是您可以通过切换回 color 来改变它。

使用更真实的随机数据集,包括不同变量的“所有”选项,试试这个:

set.seed(42)
compiled_allhours <- data.frame(
  mean_mex6 = runif(200),RNAi = sample(c("Control RNAi","mex-6 RNAi"),200,replace = TRUE),Time = sample(c("2hr","4hr","6hr","8hr","24hr"),Worm = sample(c("worm1","worm2","worm3"),replace = TRUE)
)
library(ggplot2)
library(ggbeeswarm)

ggplot(compiled_allhours,aes(x=Time,y=mean_mex6,group=interaction(RNAi,Time))) + 
  geom_violin(aes(color = RNAi),trim=FALSE) +
  scale_x_discrete(limits=c("2hr","24hr")) + ##This chooses which data to plot and orders them
  geom_quasirandom(aes(x=Time,fill = Worm),shape = 21,color = "transparent",dodge.width = 0.9,varwidth = TRUE) +
  ggtitle(expression(paste(italic("mex-6")," nuclear signal"," - WT"))) +
  theme(plot.title = element_text(hjust = 0.5)) + ##Centers the title of the plot
  xlab("Time") +
  ylab(expression(paste("normalized ",italic("mex-6")," nuclear signal (A.U.)")))

reprex package (v0.3.0) 于 2021 年 1 月 4 日创建

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...