gpt4 book ai didi

r - ggplot : How to create different x-axis titles with facet_grid

转载 作者:行者123 更新时间:2023-12-03 23:55:30 27 4
gpt4 key购买 nike

我有两个共享 y 轴但具有不同 x 轴的图。我使用 facet_grid 将它们适本地分开(见图),但是两个 x 轴需要有不同的标题(而不是一个标题“Num Cell Lines.Tissue”)。我已经看到通过首先创建 2 个 ggplot 对象然后使用像 ggplotGrob 这样的函数来完成类似的事情。有没有办法直接做到这一点?

编辑 1:包含数据、代码

数据:

Variable  Condition  Num.CellLines.Tissue   Percent.Altered
V1 C1 1 0.20149254
V1 C1 2 0.03731343
V1 C1 3 0
V1 C1 4 0
V1 C1 5 0
V2 C2 1 0.74893617
V2 C2 2 0.37446809
V2 C2 3 0.16595745
V2 C2 4 0.09787234
V2 C2 5 0.06808511
V2 C2 6 0.05531915
V2 C2 7 0.02553191
V2 C2 8 0.01702128
V2 C2 9 0.01276596
V2 C2 10 0.00851064
V2 C3 1 0.88554217
V2 C3 2 0.68072289
V2 C3 3 0.40361446
V2 C3 4 0.22289157
V2 C3 5 0.11445783
V2 C3 6 0.06626506
V2 C3 7 0.04819277
V2 C3 8 0.01807229
V2 C3 9 0.01807229
V2 C3 10 0.01204819
V2 C4 1 0.87301587
V2 C4 2 0.6984127
V2 C4 3 0.52380952
V2 C4 4 0.38095238
V2 C4 5 0.25925926
V2 C4 6 0.14285714
V2 C4 7 0.07407407
V2 C4 8 0.04232804
V2 C4 9 0.03703704
V2 C4 10 0.03174603

代码:
ggplot(data, aes(y=Percent.Altered, x = Num.CellLines.Tissue, color= Condition )) + geom_line(size=1) + facet_grid(. ~ Variable, scales="free_x")

enter image description here

编辑 2:理想地块的图像

默认情况下,标签 V1 和 V2 以我希望它们的方式显示,它们与它们下方 x 轴的标题不同。

enter image description here

最佳答案

我们可以使用 switch = 'x'然后放置 strip.placement = "outside"

library(tidyverse)

text = "Variable Condition Num.CellLines.Tissue Percent.Altered
V1 C1 1 0.20149254
V1 C1 2 0.03731343
V1 C1 3 0
V1 C1 4 0
V1 C1 5 0
V2 C2 1 0.74893617
V2 C2 2 0.37446809
V2 C2 3 0.16595745
V2 C2 4 0.09787234
V2 C2 5 0.06808511
V2 C2 6 0.05531915
V2 C2 7 0.02553191
V2 C2 8 0.01702128
V2 C2 9 0.01276596
V2 C2 10 0.00851064
V2 C3 1 0.88554217
V2 C3 2 0.68072289
V2 C3 3 0.40361446
V2 C3 4 0.22289157
V2 C3 5 0.11445783
V2 C3 6 0.06626506
V2 C3 7 0.04819277
V2 C3 8 0.01807229
V2 C3 9 0.01807229
V2 C3 10 0.01204819
V2 C4 1 0.87301587
V2 C4 2 0.6984127
V2 C4 3 0.52380952
V2 C4 4 0.38095238
V2 C4 5 0.25925926
V2 C4 6 0.14285714
V2 C4 7 0.07407407
V2 C4 8 0.04232804
V2 C4 9 0.03703704
V2 C4 10 0.03174603"

data <- read.table(text = text, header = TRUE)
head(data)
#> Variable Condition Num.CellLines.Tissue Percent.Altered
#> 1 V1 C1 1 0.20149254
#> 2 V1 C1 2 0.03731343
#> 3 V1 C1 3 0.00000000
#> 4 V1 C1 4 0.00000000
#> 5 V1 C1 5 0.00000000
#> 6 V2 C2 1 0.74893617

ggplot(data, aes(y = Percent.Altered, x = Num.CellLines.Tissue, color = Condition )) +
geom_line(size = 1) + facet_grid(. ~ Variable, scales = "free_x", switch = 'x') +
theme_classic(base_size = 16) +
theme(strip.placement = "outside") +
theme(axis.title.x = element_blank(),
strip.background = element_blank())



# Append the original x-axis label. Code taken from the ref below 
# http://ggplot2.tidyverse.org/reference/as_labeller.html
appender <- function(string, prefix = "Num.CellLines.Tissue: ") paste0(prefix, string)
ggplot(data, aes(y = Percent.Altered, x = Num.CellLines.Tissue, color = Condition )) +
geom_line(size = 1) +
facet_grid(. ~ Variable,
labeller = as_labeller(appender),
scales = "free_x", switch = 'x') +
theme_classic(base_size = 16) +
theme(strip.placement = "outside") +
theme(axis.title.x = element_blank(),
strip.background = element_blank())



根据OP的新图片进行编辑,我们需要绘制 V1 & V2分别然后使用 cowplot::plot_grid 合并在一起功能:

# V1
p1 <- ggplot(data %>% filter(Variable == "V1"),
aes(y = Percent.Altered, x = Num.CellLines.Tissue, color = Condition )) +
geom_line(size = 1) +
facet_grid(. ~ Variable, scales = "free_x") +
scale_y_continuous(limits = c(0, 1), expand = c(0, 0)) +
theme_classic(base_size = 16) +
theme(
legend.position = "none",
plot.margin = unit(c(0, 0, 0, 0), "cm")) +
scale_color_brewer(palette = "Set1") +
xlab("# Tissues")

# V2
p2 <- ggplot(data %>% filter(Variable == "V2"),
aes(y = Percent.Altered, x = Num.CellLines.Tissue, color = Condition )) +
geom_line(size = 1) +
facet_grid(. ~ Variable, scales = "free_x") +
scale_y_continuous(limits = c(0, 1), expand = c(0, 0)) +
theme_classic(base_size = 16) +
theme(
legend.position = "none",
plot.margin = unit(c(0, 0, 0, 0), "cm")) +
scale_color_brewer(palette = "Dark2") +
xlab("# Cell Lines") + ylab("")

# Remove the y-axis for the 2nd plot - p2 then merge 2 plots
cowplot::plot_grid(p1,
p2 +
theme(axis.text.y = element_blank(),
axis.line.y = element_blank(),
axis.title.y= element_blank(),
axis.ticks.y= element_blank()),
nrow = 1,
rel_widths = c(1.2, 1),
align = 'h', axis = 'tb')



创建于 2018-03-04 由 reprex package (v0.2.0)。

关于r - ggplot : How to create different x-axis titles with facet_grid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com