即使图表中未显示类别,也显示整个图例
Show entire legend even when a category is not displayed in the graph
我正在制作一张图表来显示棒球运动员的击球模式。
网格上的位置对应于球被击中的位置,圆圈的颜色对应于结果(单打、双打、三打、本垒 运行、出局、牺牲飞球)。
我正在为多个玩家重复此图表,但并非所有玩家在所有类别中都有成功。
我确保结果用相同的颜色标记(否则如果主场 运行 一位玩家的主场 运行 是绿色而另一位玩家的出局是绿色会造成混淆)。
我想展示一个图例,其中包括所有结果(单一、双重、三重等),即使对于没有绘制所有这些结果的图表也是如此。对于查看此内容的人来说,识别特定玩家没有家 运行 是很有用的。
关于我遗漏了什么有什么想法吗?
#ggspraychart (data = correa, fill_value = "events")
spray_chart <- function(...) {
ggplot(...) +
geom_curve(x = 33, xend = 223, y = -100, yend = -100, curvature = -.65, color = "#36521A") +
geom_segment(x = 128, xend = 33, y =-208, yend = -100, color = "#36521A") +
geom_segment(x = 128, xend = 223, y =-208, yend = -100, color = "#36521A") +
geom_curve(x = 83, xend = 173, y = -155, yend = -156, curvature = -.65, linetype = "dotted", color = "#36521A") +
coord_fixed() +
scale_x_continuous(NULL, limits = c(25, 225))+
scale_y_continuous(NULL, limits = c(-225, -25))
}
spray_chart(PlayerNF_events, aes(x = hc_x, y = -hc_y, color = events)) +
geom_point(size = 5) +
labs(
title = PlayerName,
subtitle = "Regular season 2019 vs TB")+
scale_color_manual(values = c("single" = "#DBA92A", "doule" = "#D98327", "triple" = "#CF5423", "home_run" = "#DE2723", "field_out" = "#3D5A5C", "sac_fly" = "#48475C")) +
theme(
# Remove panel border
panel.border = element_blank(),
# Remove panel grid lines
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
# Remove panel background
panel.background = element_blank(),
# Add axis line
axis.line = element_blank(),
axis.ticks = element_blank(),
axis.text = element_blank()
)
这是一种可能适用于您的数据的方法:添加一个层,其数据包含所有结果,但通过使其透明 (alpha = 0
) 隐藏该层,使其值 NA
,等等
iris_s <- subset(iris, Species == "setosa")
ggplot(iris_s, aes(Sepal.Width, Sepal.Length, color = Species)) +
geom_point() +
scale_color_manual(values = c("setosa" = "#DBA92A",
"versicolor" = "#3D5A5C",
"virginica" = "#CF5423")) +
# Either of these should work
# geom_point(data = iris, alpha = 0) +
geom_point(data = dplyr::mutate(iris, Sepal.Width = NA_real_))
这基于@Jon Spring 的示例数据,但使用 tidyr::complete
来确保感兴趣的列(此处 Species
)中的所有因子水平都明确缺失,而不是隐式缺失(即存在并具有 NA,因此将包含在图例中)。
这比使用整个数据要好,因为绘制透明数据可能会很慢,这也意味着轴限制是由您绘制的数据设置的,而不是整个 data.frame。
iris_s %>% tidyr::complete(Species) %>%
ggplot(., aes(Sepal.Width, Sepal.Length, color = Species)) +
geom_point() +
scale_color_manual(values = c("setosa" = "#DBA92A",
"versicolor" = "#3D5A5C",
"virginica" = "#CF5423"))
我正在制作一张图表来显示棒球运动员的击球模式。
网格上的位置对应于球被击中的位置,圆圈的颜色对应于结果(单打、双打、三打、本垒 运行、出局、牺牲飞球)。
我正在为多个玩家重复此图表,但并非所有玩家在所有类别中都有成功。
我确保结果用相同的颜色标记(否则如果主场 运行 一位玩家的主场 运行 是绿色而另一位玩家的出局是绿色会造成混淆)。
我想展示一个图例,其中包括所有结果(单一、双重、三重等),即使对于没有绘制所有这些结果的图表也是如此。对于查看此内容的人来说,识别特定玩家没有家 运行 是很有用的。
关于我遗漏了什么有什么想法吗?
#ggspraychart (data = correa, fill_value = "events")
spray_chart <- function(...) {
ggplot(...) +
geom_curve(x = 33, xend = 223, y = -100, yend = -100, curvature = -.65, color = "#36521A") +
geom_segment(x = 128, xend = 33, y =-208, yend = -100, color = "#36521A") +
geom_segment(x = 128, xend = 223, y =-208, yend = -100, color = "#36521A") +
geom_curve(x = 83, xend = 173, y = -155, yend = -156, curvature = -.65, linetype = "dotted", color = "#36521A") +
coord_fixed() +
scale_x_continuous(NULL, limits = c(25, 225))+
scale_y_continuous(NULL, limits = c(-225, -25))
}
spray_chart(PlayerNF_events, aes(x = hc_x, y = -hc_y, color = events)) +
geom_point(size = 5) +
labs(
title = PlayerName,
subtitle = "Regular season 2019 vs TB")+
scale_color_manual(values = c("single" = "#DBA92A", "doule" = "#D98327", "triple" = "#CF5423", "home_run" = "#DE2723", "field_out" = "#3D5A5C", "sac_fly" = "#48475C")) +
theme(
# Remove panel border
panel.border = element_blank(),
# Remove panel grid lines
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
# Remove panel background
panel.background = element_blank(),
# Add axis line
axis.line = element_blank(),
axis.ticks = element_blank(),
axis.text = element_blank()
)
这是一种可能适用于您的数据的方法:添加一个层,其数据包含所有结果,但通过使其透明 (alpha = 0
) 隐藏该层,使其值 NA
,等等
iris_s <- subset(iris, Species == "setosa")
ggplot(iris_s, aes(Sepal.Width, Sepal.Length, color = Species)) +
geom_point() +
scale_color_manual(values = c("setosa" = "#DBA92A",
"versicolor" = "#3D5A5C",
"virginica" = "#CF5423")) +
# Either of these should work
# geom_point(data = iris, alpha = 0) +
geom_point(data = dplyr::mutate(iris, Sepal.Width = NA_real_))
这基于@Jon Spring 的示例数据,但使用 tidyr::complete
来确保感兴趣的列(此处 Species
)中的所有因子水平都明确缺失,而不是隐式缺失(即存在并具有 NA,因此将包含在图例中)。
这比使用整个数据要好,因为绘制透明数据可能会很慢,这也意味着轴限制是由您绘制的数据设置的,而不是整个 data.frame。
iris_s %>% tidyr::complete(Species) %>%
ggplot(., aes(Sepal.Width, Sepal.Length, color = Species)) +
geom_point() +
scale_color_manual(values = c("setosa" = "#DBA92A",
"versicolor" = "#3D5A5C",
"virginica" = "#CF5423"))