如何在R中使用点图并列绘制多个变量?

12

我对R还不太熟悉,遇到了一个绘图的问题,找不到答案。

我有一个数据框,看起来像这样(虽然更大):

df <- data.frame(Treatment= rep(c("A", "B", "C"), each = 6),
                 LocA=sample(1:100, 18), 
                 LocB=sample(1:100, 18), 
                 LocC=sample(1:100, 18))

我希望能够在Excel中制作类似于这个的点图。 这正是我想要的格式:每个治疗方法在每个位置旁边都有一个点图,将多个位置的数据放在一个图表中。 (非常抱歉无法在此处发布图片;发布图片需要10个声誉值。)

enter image description here

为每个位置制作彩色代码点图等也没有问题:

ggplot(data = df, aes(x=Treatment, y=LocA, color = Treatment)) + geom_point() 

但我不知道如何将位置B和位置C添加到同一图表中。

任何建议都将不胜感激!


将数据转换为长格式,然后对图进行分面处理。 - mnel
2个回答

13

正如一些人所提到的,你需要将数据“融化”,使其成为“长格式”。

library(reshape2)
df_melted <- melt(df, id.vars=c("Treatment"))
colnames(df_melted)[2] <- "Location"
在 ggplot 术语中,将不同的组(如治疗)并排放置是通过“dodging”实现的。通常对于像条形图这样的图表,您可以只需输入 position="dodge" 就可以了,但对于 geom_point 这样的图表则需要更多手动规范。
ggplot(data=df_melted, aes(x=Location, y=value, color=Treatment)) +
  geom_point(position=position_dodge(width=0.3))

这里输入图片描述


不需要手动躲避,只需在调用geom_point时使用position_dodge。例如:DF <- melt(df, id.var = 'treatment');ggplot(DF, aes(y=value,x=variable)) + geom_point(aes(colour = Treatment), position = position_dodge(width = 1)) - mnel
该死,position="dodge" 没有起作用,所以我认为点的闪避没有实现。现在正在编辑我的答案。 - Marius
1
谢谢! 这正是我在寻找的。老实说,我更愿意使用箱线图,但我的老板坚信点图更好,因为她喜欢看到点聚集和异常值(是的,我知道所有这些信息都存在于箱线图中,不过我无法解释为什么看到个体点“更好”,除非我涉及一些非常复杂的东西,比如尝试为原始数据框中的每个[行]给出一个特定的符号,然后您可以尝试查看是否有一个符号在各个位置上保持高度一致)。 - phosphorelated

4

您需要对数据进行重塑。以下是使用reshape2的示例:

library(reshape2)
dat.m <- melt(dat, id.vars='Treatment')
library(ggplot2)
ggplot(data = dat.m, 
        aes(x=Treatment, y=value,shape = Treatment,color=Treatment)) + 
                  geom_point()+facet_grid(~variable)

输入图像描述

由于您想要一个dotplot,我建议使用lattice解决方案。我认为在这种情况下更加合适。

dotplot(value~Treatment|variable,
        groups = Treatment, data=dat.m,
        pch=c(25,19),
        par.strip.text=list(cex=3),
        cex=2)

enter image description here


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