ggplot2 函数中 geom_boxplot 的平均值和中值箱线图图例
Posted
技术标签:
【中文标题】ggplot2 函数中 geom_boxplot 的平均值和中值箱线图图例【英文标题】:Mean and median boxplot legend for geom_boxplot in the ggplot2 function 【发布时间】:2021-11-25 08:34:32 【问题描述】:我正在尝试将黑色实线识别为“中位数”,将红色虚线识别为“平均值”。
但是,即使我包含show.legend = TRUE
和legend.position = "right"
,图例也不会显示在图表上。我将在我的箱线图下方添加一张图片,因为它目前没有图例。
图片说明:
我的代码如下:
box %>%
pivot_longer(cols = c(Total, EX, MD, CI, EI)) %>%
ggplot(aes(x = name, y = value)) +
geom_boxplot(fill="gray", show.legend = TRUE) +
labs(x = "Burnout Dimension", y = "Likert Response Count") +
stat_summary(fun.y = mean, geom = "errorbar", aes(ymax = ..y.., ymin = ..y..),
width = .75, linetype = "dashed", color="red") +
scale_colour_manual("Values", values=c("blue", "red")) +
theme_minimal() +
theme(text = element_text(family="Times New Roman",
color="#595959",
size=14),
legend.position = "right",
panel.grid.major.y = element_line(c(0,25,50,75,100),
color="#D9D9D9",
size=0.2),
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
panel.background = element_blank())
【问题讨论】:
【参考方案1】:如果你想拥有一个传奇,你必须在美学上进行映射:
-
将
color = ...
移动到aes()
中,而不是使用颜色名称(在这种情况下没有意义),而是使用一些有意义的标签,例如mean
或 median
。
要获得中位数的图例条目,您还必须为中位数添加第二个stat_summary
层,并摆脱geom_boxplot
绘制的默认中线,例如使用fatten = 0
通过使用命名向量来设置所需的颜色,在该向量中,您使用在步骤 1 中设置的有意义的标签作为名称。
由于您没有提供数据,我使用了一些随机的假数据:
library(tidyr)
library(ggplot2)
box %>%
pivot_longer(cols = c(Total, EX, MD, CI, EI)) %>%
ggplot(aes(x = name, y = value)) +
geom_boxplot(fill = "gray", show.legend = FALSE, fatten = 0) +
labs(x = "Burnout Dimension", y = "Likert Response Count") +
stat_summary(
fun = mean, geom = "errorbar", aes(ymax = ..y.., ymin = ..y.., color = "Mean"),
width = .75, linetype = "dashed"
) +
stat_summary(
fun = median, geom = "errorbar", aes(ymax = ..y.., ymin = ..y.., color = "Median"),
width = .75, linetype = "solid"
) +
scale_colour_manual("Values", values = c(Median = "blue", Mean = "red")) +
theme_minimal() +
theme(
text = element_text(
family = "Times New Roman",
color = "#595959",
size = 14
),
legend.position = "right",
panel.grid.major.y = element_line(c(0, 25, 50, 75, 100),
color = "#D9D9D9",
size = 0.2
),
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
panel.background = element_blank()
)
数据
set.seed(42)
box <- data.frame(
EX = sample(1:5, 10, replace = TRUE),
MD = sample(1:5, 10, replace = TRUE),
CI = sample(1:5, 10, replace = TRUE),
EI = sample(1:5, 10, replace = TRUE),
Total = sample(1:5, 10, replace = TRUE)
)
【讨论】:
以上是关于ggplot2 函数中 geom_boxplot 的平均值和中值箱线图图例的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组水平箱图(boxplot)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置显示的分组)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点显示)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色配置)实战