R 如何使用ggplot2绘制与排序点叠加的箱线图
使用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", &
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您好,请提供一个示例数据集,我们可以使用它来帮助您定义明确的问题?你所展示的情节的哪一部分给你带来了最大的麻烦?到目前为止,你做了什么来让它起作用?谢谢,我已经更清楚地修改了我的问题。