带有散点图叠加的ggplot箱图(相同的变量)

时间:2013-02-05 00:28:20

标签: r ggplot2 boxplot

我是一名本科研究员,过去几个月我一直在教自己R.我刚刚开始尝试ggplot,并遇到了一些麻烦。我制作了一系列箱形图,在不同的声学接收站观察鱼的深度。我想添加一个散点图,显示接收站的深度。这就是我到目前为止所做的:

data    <- read.csv(".....MPS.csv", header=TRUE)
df      <- data.frame(f1=factor(data$Tagging.location), #$
                      f2=factor(data$Station),data$Detection.depth)
df2     <- data.frame(f2=factor(data$Station), data$depth)
df$f1f2 <- interaction(df$f1, df$f2) #$
plot1   <- ggplot(aes(y = data$Detection.depth, x = f2, fill = f1), data = df) + #$
                  geom_boxplot() + stat_summary(fun.data = give.n, geom = "text", 
                  position = position_dodge(height = 0, width = 0.75), size = 3)
                  plot1+xlab("MPS Station") + ylab("Depth(m)") +
                  theme(legend.title=element_blank()) + scale_y_reverse() + 
                  coord_cartesian(ylim=c(150, -10))
plot2   <- ggplot(aes(y=data$depth, x=f2), data=df2) + geom_point()
                  plot2+scale_y_reverse() + coord_cartesian(ylim=c(150,-10)) + 
                  xlab("MPS Station") + ylab("Depth (m)")

不幸的是,由于我是这个论坛的新用户,我不允许上传这两个图的图像。我的x轴是“台”(有12个选项),我的y轴是“深度”(0-150米)。箱形图由标记站点(有2个选项)进行颜色编码。深度来自我的电子表格中的两个不同的列,它们不能合并为一个。

我的目标是通过将“plot2”(站点深度散点图)添加到“plot1”箱图(检测深度)来组合这两个图。它们都在查看相同的变量(深度和站点),并且必须是相同的y轴刻度。

如果我使用R基础程序,我想我可以找出一个混乱的解决方法,但如果可能的话,我想正确学习ggplot。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

更新:我对原帖中使用的语言感到困惑,并写了一个比必要更复杂的答案。这是清理版本。

第1步:设置。在这里,我们确保两个数据框中的深度值具有相同的变量名称(为了便于阅读)。

df <- data.frame(f1=factor(data$Tagging.location), f2=factor(data$Station), depth=data$Detection.depth)

df2 <- data.frame(f2=factor(data$Station), depth=data$depth)

第2步:现在您可以使用'ggplot'函数对其进行绘制,并使用`col = f1``参数拆分数据。我们将分别绘制检测数据,因为这需要一个箱线图,然后我们将用彩色点绘制站点的深度(假设每个站点只有一个深度)。我们通过引用'geom'函数中的数据来指定两个不同的图,而不是在主'ggplot'函数中指定数据。看起来应该是这样的:

ggplot()+geom_boxplot(data=df, aes(x=f2, y=depth, col=f1)) + geom_point(data=df2, aes(x=f2, y=depth), colour="blue") + scale_y_reverse()

在此绘图示例中,我们使用箱线图来表示检测数据,并通过站点标签为这些箱图着色。然而,我们使用特定颜色的点分别绘制工作站,因此我们将能够清楚地看到它们与箱形图的关系。

您应该可以从这里调整情节以满足您的需求。

我已经创建了一些虚拟数据并加载到图表中以显示它的外观。请记住,这纯粹是随机数据,并没有多大意义。

Depth Chart