GGplot2 在图表的两个不同部分添加中位数
GGplot2 Add medians in two different part of the graph
我正在尝试将中值绘制成单个案例研究的图表。不幸的是,我无法得到我想要的结果。这是我的代码。
Rate <- c(8, 4, 5, 5, 5, 4, 8, 7, 18, 15, 9, 8, 17, 19, 11, 11)
Phase <- c("A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B")
Occasions <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
db4 <- data.frame(Occasions, Phase, Rate)
medians <- db4 %>%
group_by(Phase) %>%
mutate(M = median(Rate))
ggplot(data = db4, aes(x = Occasions, y = Rate)) +
geom_point(aes(colour = Phase)) +
geom_line(aes(group = Phase, color = Phase)) +
geom_hline(yintercept = medians$M, colour = 'red') +
geom_vline(xintercept = 8.5, linetype = "dashed", color = "blue", size = 0.5) +
xlab("Occasions") +
ylab("Ratings")
在下面,您可以找到来自这段代码的情节。然而,两条中线目前都是红色的,并且延伸到整个地块。我想只在图表的左侧有第一条红色中线,只在图表的右侧有第二条蓝色中线。我还想为 "Baseline" 和 "Intervention"
两侧添加标题
感谢您的帮助!
下面是我将如何处理这个情节。我不会使用分面,因为您想将所有内容都放在一个轴上,但我也不会使用两个标题。相反,只需重新标记您的图例以明确哪些点是基线,哪些点是干预。
要固定中线并防止它们穿过整个地块,您需要使用 geom_segment
而不是 geom_hline
。这也意味着您需要向 medians
数据框添加更多列以提供正确的输入(段的开始和结束坐标)。我将 color = Phase
移动到顶部 ggplot()
因此 geom-segment
继承并拆分了两个阶段。最后我让 geom_vline
使用 xintercept
的美学,所以它的位置不是硬编码的(在你的情况下可能是也可能不是理想的)。
library(tidyverse)
db4 <- data.frame(
Rate = c(8, 4, 5, 5, 5, 4, 8, 7, 18, 15, 9, 8, 17, 19, 11, 11),
Phase = c("A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B"),
Occasions = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
)
medians <- db4 %>%
group_by(Phase) %>%
summarise(
y = median(Rate),
x_start = min(Occasions),
x_end = max(Occasions)
)
ggplot(data = db4, aes(x = Occasions, y = Rate, color = Phase)) +
geom_point() +
geom_line() +
geom_segment(
data = medians,
mapping = aes(x = x_start, xend = x_end, y = y, yend = y)
) +
geom_vline(
mapping = aes(xintercept = median(Occasions)),
linetype = "dashed",
color = "blue",
size = 0.5
) +
labs(x = "Occasions", y = "Ratings") +
scale_colour_hue(labels = c("Baseline", "Intervention"))
由 reprex package (v0.2.0) 创建于 2018-08-13。
您可以简单地使用 facet_grid
和免费的 x 刻度。
将 A
和 B
更改为 Baseline
和 Intervention
重新编码该列。
db4 <- data.frame(Occasions, Phase, Rate) %>%
mutate(Phase = recode(Phase, A = "Baseline", B = "Intervention"))
medians <- db4 %>%
group_by(Phase) %>%
mutate(M = median(Rate))
ggplot(data = db4, aes(x = Occasions, y = Rate)) +
geom_point(aes(colour = Phase)) +
geom_line(aes(group = Phase, color = Phase)) +
geom_hline(aes(yintercept = M), colour = 'red', data = medians) +
facet_grid(~Phase, scales = "free_x") +
xlab("Occasions") +
ylab("Ratings")
我正在尝试将中值绘制成单个案例研究的图表。不幸的是,我无法得到我想要的结果。这是我的代码。
Rate <- c(8, 4, 5, 5, 5, 4, 8, 7, 18, 15, 9, 8, 17, 19, 11, 11)
Phase <- c("A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B")
Occasions <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
db4 <- data.frame(Occasions, Phase, Rate)
medians <- db4 %>%
group_by(Phase) %>%
mutate(M = median(Rate))
ggplot(data = db4, aes(x = Occasions, y = Rate)) +
geom_point(aes(colour = Phase)) +
geom_line(aes(group = Phase, color = Phase)) +
geom_hline(yintercept = medians$M, colour = 'red') +
geom_vline(xintercept = 8.5, linetype = "dashed", color = "blue", size = 0.5) +
xlab("Occasions") +
ylab("Ratings")
在下面,您可以找到来自这段代码的情节。然而,两条中线目前都是红色的,并且延伸到整个地块。我想只在图表的左侧有第一条红色中线,只在图表的右侧有第二条蓝色中线。我还想为 "Baseline" 和 "Intervention"
感谢您的帮助!
下面是我将如何处理这个情节。我不会使用分面,因为您想将所有内容都放在一个轴上,但我也不会使用两个标题。相反,只需重新标记您的图例以明确哪些点是基线,哪些点是干预。
要固定中线并防止它们穿过整个地块,您需要使用 geom_segment
而不是 geom_hline
。这也意味着您需要向 medians
数据框添加更多列以提供正确的输入(段的开始和结束坐标)。我将 color = Phase
移动到顶部 ggplot()
因此 geom-segment
继承并拆分了两个阶段。最后我让 geom_vline
使用 xintercept
的美学,所以它的位置不是硬编码的(在你的情况下可能是也可能不是理想的)。
library(tidyverse)
db4 <- data.frame(
Rate = c(8, 4, 5, 5, 5, 4, 8, 7, 18, 15, 9, 8, 17, 19, 11, 11),
Phase = c("A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B"),
Occasions = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
)
medians <- db4 %>%
group_by(Phase) %>%
summarise(
y = median(Rate),
x_start = min(Occasions),
x_end = max(Occasions)
)
ggplot(data = db4, aes(x = Occasions, y = Rate, color = Phase)) +
geom_point() +
geom_line() +
geom_segment(
data = medians,
mapping = aes(x = x_start, xend = x_end, y = y, yend = y)
) +
geom_vline(
mapping = aes(xintercept = median(Occasions)),
linetype = "dashed",
color = "blue",
size = 0.5
) +
labs(x = "Occasions", y = "Ratings") +
scale_colour_hue(labels = c("Baseline", "Intervention"))
由 reprex package (v0.2.0) 创建于 2018-08-13。
您可以简单地使用 facet_grid
和免费的 x 刻度。
将 A
和 B
更改为 Baseline
和 Intervention
重新编码该列。
db4 <- data.frame(Occasions, Phase, Rate) %>%
mutate(Phase = recode(Phase, A = "Baseline", B = "Intervention"))
medians <- db4 %>%
group_by(Phase) %>%
mutate(M = median(Rate))
ggplot(data = db4, aes(x = Occasions, y = Rate)) +
geom_point(aes(colour = Phase)) +
geom_line(aes(group = Phase, color = Phase)) +
geom_hline(aes(yintercept = M), colour = 'red', data = medians) +
facet_grid(~Phase, scales = "free_x") +
xlab("Occasions") +
ylab("Ratings")