我是一名本科研究员,过去几个月我一直在教自己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。非常感谢任何帮助!
答案 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()
在此绘图示例中,我们使用箱线图来表示检测数据,并通过站点标签为这些箱图着色。然而,我们使用特定颜色的点分别绘制工作站,因此我们将能够清楚地看到它们与箱形图的关系。
您应该可以从这里调整情节以满足您的需求。
我已经创建了一些虚拟数据并加载到图表中以显示它的外观。请记住,这纯粹是随机数据,并没有多大意义。