gpt4 book ai didi

r - 在两个不同的 ("grid.arranged") 图之间画线

转载 作者:行者123 更新时间:2023-12-03 23:24:07 25 4
gpt4 key购买 nike

所以我设法创建了两个 ggplot-graphs 并绘制它们与 grid.arrange 完美对齐。 .现在我想将箱线图的最小值、1Q、3Q 和最大值与左图中的分布连接起来。我用 geom_hline 绘制了水平(红色条纹)线在两个图中,但我希望将这些线连接起来,因此还要穿过图之间的空白区域。有什么建议?这是图表:
enter image description here

哦,是的,复杂的因素:正确的图形的坐标翻转了!

这是一个可重现的示例:

library(ggplot2)
library(scales)
library(gridExtra)

# create some data
df_ahn <- data.frame(yh=rnorm(1000,0.23,0.05))
df_peil <- data.frame(hoogte = rnorm(1000,0,1))

# vector met de hoogtes
Summary_df <- summary(df_ahn$yh)

p_peil <- ggplot(df_peil,aes(x=hoogte))+
geom_histogram(aes(y=cumsum((..count..)/sum(..count..))), binwidth = 0.01,fill="gray")+
stat_bin(aes(y=cumsum((..count..)/sum(..count..))),binwidth = 0.01,geom="line",color="black") +
geom_vline(aes(xintercept = as.vector(Summary_df[1])), lty = 2,color =2)+
geom_vline(aes(xintercept = as.vector(Summary_df[2])), lty = 2,color =2)+
geom_vline(aes(xintercept = as.vector(Summary_df[5])), lty = 2,color =2)+
geom_vline(aes(xintercept = as.vector(Summary_df[6])), lty = 2,color =2)+
coord_flip() +
ggtitle("Onderschrijdingsfrequentie\n waterstand in kreek") +
xlab("Hoogte in meter NAP") +
ylab("Onderschrijdingsfrequentie in % (10% = 36,5 dagen/jaar)") +
scale_y_continuous(limits = c(0, 1),labels = percent, breaks=seq(0,1,by=0.1)) +
scale_x_continuous(limits = c(-0.5, 0.6), breaks=seq(-0.5,0.6,by=0.1)) +
theme(panel.background = element_rect(fill = "transparent",colour = "black"),
panel.grid.major = element_line(colour = "darkgray"),
panel.grid.minor = element_line(colour = "gray"),
strip.background = element_rect(fill="gray"),
strip.text = element_text(size=14, color="black"),
axis.ticks.y = element_line(colour = "black"),
axis.ticks.x = element_line(colour = "black"),
axis.text.x = element_text(size=14, color="black"),
axis.text.y = element_text(size=14, color="black"),
axis.title = element_text(size=14, color="black")
)

p_ahn <- ggplot(df_ahn, aes(x=1, y=yh)) +
geom_boxplot(outlier.size=3, outlier.shape=1) +
geom_hline(aes(yintercept = as.vector(Summary_df[1])), lty = 2,color =2)+
geom_hline(aes(yintercept = as.vector(Summary_df[2])), lty = 2,color =2)+
geom_hline(aes(yintercept = as.vector(Summary_df[5])), lty = 2,color =2)+
geom_hline(aes(yintercept = as.vector(Summary_df[6])), lty = 2,color =2)+
scale_y_continuous(limits = c(-0.5,0.6), breaks=seq(-0.5,0.6,by=0.1)) +
ggtitle("Hoogte groeiplaatsen\nKruipend moerascherm") +
ylab("") +
xlab("") +
theme(panel.background = element_rect(fill = "transparent",colour = "black"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
strip.background = element_rect(fill="gray"),
strip.text = element_text(size=14, color="black"),
axis.ticks.y = element_line(colour = "black"),
axis.ticks.x = element_line(colour = "white"),
axis.text.x = element_text(size=14, color="white"),
axis.text.y = element_text(size=14, color="black"),
axis.title = element_text(size=14, color="black", face="bold")

)
grid.arrange(p_peil,p_ahn, layout_matrix = matrix(c(1,1,1,2), nrow=1, byrow=TRUE), ncol = 4)

最佳答案

您可以从其中一个图中提取线,并将其添加到组合 gtable 的整个区域中,

enter image description here

library(ggplot2)
library(gtable)
library(grid)

set.seed(123)
y <- rnorm(10)
p1 <- qplot(1:10, y) +
geom_hline(yintercept=0, lty=3)

p2 <- qplot(1:10, 10*y) +
geom_hline(yintercept=0)

#library(gridExtra)
#grid.arrange(p1,p2,widths=c(3,1)) # no line

g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)
lines <- g1$grobs[[4]][["children"]][[3]]
g1$grobs[[4]][["children"]][[3]] <- NULL # remove line
g2$grobs[[4]][["children"]][[3]] <- NULL # remove line
g <- cbind(g1,g2,size="first")
g$heights <- unit.pmax(g1$heights, g2$heights)
g$widths[[9]] <- unit(1/3, "null")
g <- gtable_add_grob(g, lines, l=4, t=3, r=9, z=Inf)
grid.newpage()
grid.draw(g)

关于r - 在两个不同的 ("grid.arranged") 图之间画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32158374/

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