我正试图从一个包含一个连续变量和两个分类变量的数据集中绘制一个抖动的箱线图.我将数据分为两个数据框,因为我不希望数据框2的方式包含在箱线图中,而且我希望以不同的 colored颜色 显示它们.我使用position\u jitterdodge()使点位于与其变量"b"类别对应的方框图的顶部,但它似乎不起作用.例如,所有红点都应该集中在紫色方框图上,但它们似乎分布在整个图形中.我没有足够的声誉来添加图片,但我已经在R社区页面上发布了这个问题,并添加了一张图片,看它是否有助于https://community.rstudio.com/t/position-jitterdodge-doesnt-plot-points-by-categorical-variable/137199人.如果有人知道如何解决这个问题,我将不胜感激.

#Jittered boxplot reprex

#Load packages
library(reprex)
#> Warning: package 'reprex' was built under R version 4.0.5
library(ggplot2)

#Create dataframes

df.1 <- tibble::tribble(
        ~a, ~b, ~c,
        1, "x", "n",
        2, "x", "n",
        2, "x", "m",
        3, "x", "m",
        3, "y", "n",
        1, "y", "n",
        1, "y", "m",
        2, "y", "m",
        2, "z", "n",
        3, "z", "n",
        3, "z", "m",
        1, "z", "m"
)

df.2 <- tibble::tribble(
        ~a, ~b, ~c,
        2, "z", "n",
        3, "z", "n",
        1, "z", "n",
        3, "z", "n",
        2, "z", "m",
        1, "z", "m",
        2, "z", "m",
        3, "z", "m",
)

#Make a box plot with data from df.1, with data from df.2 overlaid as a jitterplot

plot.1 <- ggplot(data = df.1, aes(x=c, y=a, fill=b)) + 
  geom_boxplot()+
  geom_jitter(data = df.2, aes(x=c, y=a), color = "red", position=position_jitterdodge(), size=2) +
  geom_jitter(position=position_jitterdodge(), size=2)+
  scale_fill_manual("b", values=c("#FFD54F","#B2EBF2","#7B1FA2"))
plot(plot.1)

reprex package(v2.0.1)于2022年5月18日创建

推荐答案

我认为问题在于,df.2b领域具有不完整的因子水平.我建议您将数据保存在一起,但要以长格式进行 struct 化(这是ggplot更喜欢的).

df.1$grp <- "1"
df.2$grp <- "2"
df <- rbind(df.1, df.2)

ggplot(data = df, aes(x=c, y=a, fill=b, color=grp)) + 
  geom_boxplot(data = df[df$grp == 1,]) +
  geom_jitter(position = position_jitterdodge(0.05)) +
  scale_fill_manual("b", values=c("#FFD54F","#B2EBF2","#7B1FA2")) +
  scale_color_manual(guide = "none", values = c("1" = "black", "2" = "red"))

enter image description here

编辑

向分组的箱线图添加点,而不抖动.请注意,此处有几个点重叠.

ggplot(data = df, aes(x=c, y=a, fill=b, color=grp)) + 
  geom_boxplot(data = df[df$grp == 1,], outlier.shape = NA) +
  geom_point(aes(group=b), position = position_dodge(0.75)) +
  scale_fill_manual("b", values=c("#FFD54F","#B2EBF2","#7B1FA2")) +
  scale_color_manual(guide = "none", values = c("1" = "black", "2" = "red"))

enter image description here

R相关问答推荐

编辑文件后编辑RhandsonTable

然后根据不同的列值有条件地执行函数

如何在R中对深度嵌套的tibbles中的非空连续行求和?

是否可以创建一个ggplot与整洁判断的交互作用

在ggplot2中更改小提琴情节的顺序

将. xlsx内容显示为HTML表

如何通过判断数据框的一列来压缩另一列?

根据列A中的差异变异列,其中行由列B中的相对值标识

展开对数比例绘图的轴(添加填充)

Data.table';S GForce-将多个函数应用于多列(带可选参数)

如何将网站图像添加到带有极坐标的面包裹条形图?

Geom_Hline将不会出现,而它以前出现了

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

R仅当存在列时才发生变异

我需要使用ggplot2制作堆叠条形图

R中的Desolve:返回的导数数错误

如何创建直方图与对齐的每月箱?

如何在基数R中根据矩阵散点图中的因子给数据上色?

移除y轴断开的geom_bar图的外框

从txt文件中删除前n行