Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用ggplot2绘制与排序点叠加的箱线图_R_Ggplot2_Boxplot_Point - Fatal编程技术网

R 如何使用ggplot2绘制与排序点叠加的箱线图

R 如何使用ggplot2绘制与排序点叠加的箱线图,r,ggplot2,boxplot,point,R,Ggplot2,Boxplot,Point,使用ggplot2,我可以绘制与点叠加的箱线图。但这些点位于一条垂直线上 library(ggplot2) example_data <- data.frame(cohort = c("ACC", "ACC", "ACC", "ACC", "ACC", "ACC", "ACC", "ACC", "ACC", &

使用ggplot2,我可以绘制与点叠加的箱线图。但这些点位于一条垂直线上

library(ggplot2)

example_data <- data.frame(cohort = c("ACC", "ACC", "ACC", "ACC", "ACC", "ACC", "ACC", "ACC", "ACC", "ACC", "CHOL", "CHOL", "CHOL", "CHOL", "CHOL", "CHOL", "CHOL", "CHOL", "CHOL", "CHOL", "DLBC", "DLBC", "DLBC", "DLBC", "DLBC", "DLBC", "DLBC", "DLBC", "DLBC", "DLBC"), 
                           sample = c("A5LI", "A5JQ", "A5JP", "A5LE", "A5LG", "A5JV", "A5JD", "A5J8", "A5K8", "A5L3", "AA33", "AA30", "AA2T", "A95A", "AAZT", "A8I3", "AAV9", "A8Y4", "A8Y8", "AA31", "AAAT", "A9U4", "A7Q1", "A7DS", "A9TV", "A4D5", "A9TY", "A7CX", "A9TW", "A86F"), 
                           count = c(50, 5, 65, 22, 18, 25, 27, 86, 24, 20, 48, 96, 60, 27, 81, 34, 43, 58, 31, 77, 160, 31, 157, 104, 84, 53, 153, 111, 278, 105))


ggplot(example_data, aes(cohort, count)) + 
  geom_boxplot(aes(color = cohort)) + 
  geom_point(aes(color = cohort)) +
  scale_y_log10() +
  labs(x = NULL) +
  theme(axis.line.x = element_blank(), axis.ticks.x = element_blank(), 
        axis.text.x = element_text(angle = 45, vjust = 0.5, hjust = 0.5), legend.position = 'none')

库(ggplot2)

如果你看你所期望的输出的样例情节,考虑尺度,基本上有两个不同的层:

  • 总而言之:x轴作为某个类别(“DKFZ”、“Sanger”、“SMuFin”…),y轴是用于箱线图的某个值

  • 在每个箱线图中:x轴是其他连续值,y轴与箱线图中y轴使用的值相同

  • 这意味着每个箱线图的x轴不同于用于整个图的x轴。你需要一个“辅助x轴”。抛开所有关于这是一个好主意的评论不谈,我可以在
    ggplot2
    中向您展示如何做到这一点的方法

    辅助x轴不是带有
    ggplot2
    的内置特征;但是,由于您所需的一个轴是分类/离散的(
    example\u data$court
    ),而另一个轴是连续的(
    example\u data$count
    ),我们可以通过一些巧妙的面格式模拟两个x轴的这种效果

    总体思路是,我们根据
    队列
    ,将您的图分为多个面,然后在每个图中,我们显示整体的箱线图(按
    队列
    分组)和每个面上的图点。这意味着我们的x轴值是
    count
    以及y轴值-我假设在实际数据中,轴值不会相同,但它可以用于示例目的。然后,我们可以使用一些
    主题
    元素和关于刻面标签的选项(在
    ggplot2
    中称为
    strip.text
    元素)来模拟相同的外观。我还将切换到默认情况下使用
    主题\u classic()
    ,因为否则您必须处理在最终绘图中没有意义的x网格线。如果需要垂直线,则必须根据数据手动或以编程方式放置垂直线

    通常,面是分开的,但我通过
    panel.spacing.x
    将它们推到一起

    并排比较绘图很有用,因此请注意,我在这里使用
    cowplot::plot\u grid()
    来排列新旧绘图,以便于演示

    一个非常重要的注意事项是,我在调用
    geom\u boxplot()
    时添加了
    outlier.shape=NA
    。这一点很重要,因为默认情况下,任何异常值都将通过
    geom_boxplot()
    命令显示为点,并且它们将处于“不正确”的x位置。因为我们已经在处理所有这些点的所需位置,所以有必要像这样移除它们

    p <- # your code you shared + labs(title="Old Plot")
    
    p1 <- 
    ggplot(example_data, aes(count, count)) +
      geom_boxplot(aes(color=cohort), outlier.shape = NA) +
      geom_point(aes(color=cohort)) +
      facet_wrap(~cohort, scales='free_x', strip.position = 'bottom') +
      scale_y_log10() +
      labs(title='New Plot', x=NULL) +
      theme_classic() +
      theme(
        panel.spacing.x = unit(0,'pt'),
        axis.text.x = element_blank(),
        strip.placement = 'outside',
        strip.background = element_blank(),
        axis.ticks.x = element_blank()
      )
    
    library(cowplot)
    plot_grid(p, p1)
    

    p您好,请提供一个示例数据集,我们可以使用它来帮助您定义明确的问题?你所展示的情节的哪一部分给你带来了最大的麻烦?到目前为止,你做了什么来让它起作用?谢谢,我已经更清楚地修改了我的问题。