作為這個著名執行緒的后續。我決定提出一個新問題,因為這更專門針對垂直圖例,并且給出的答案仍然不能提供完全令人滿意的解決方案。對于多邊形關鍵字形,有人建議通過修改底層 draw_key 函式來增加實際多邊形字形和關鍵邊界之間的邊距大小。但是,如果我想保留邊框(例如黑色),這實際上不起作用。
并且當使用其他幾何圖形(例如,geom_line)時,我什至不知道如何增加字形和邊框之間的邊距 - 簡要看一下中使用的 draw_key 函式ggplot2:::GeomLine(它不使用匯出的 draw_key 函式),它我不清楚在哪里修改它。
所以,我的問題是,是否有一種方法可以更改關鍵字形之間的實際空間,從而可以保留邊框(例如,顏色 =“黑色”),并且不會增加字形大小。
library(ggplot2)
p <- ggplot(dplyr::filter(msleep, grepl("^C", order)),
aes(sleep_total, sleep_rem, color = order))
geom_line(na.rm = TRUE)
theme(legend.key = element_rect(color = "black"))
p
示例圖:關鍵字形接觸。

p theme(legend.key.height = unit(.5, "in"))
如果我洗掉顏色,該示例看起來好像字形的間距更大,但我希望關鍵字形的大小與上述相同,只是它們之間的空間。

GeomLine 中的底層 draw_key
# ggplot2:::GeomLine$draw_key
#> ...
#> segmentsGrob(0.1, 0.5, 0.9, 0.5, gp = gpar(col = alpha(data$colour %||%
#> data$fill %||% "black", data$alpha), fill = alpha(params$arrow.fill %||%
#> data$colour %||% data$fill %||% "black", data$alpha),
#> lwd = (data$size %||% 0.5) * .pt, lty = data$linetype %||%
#> 1, lineend = "butt"), arrow = params$arrow)
#> ...
由reprex 包(v2.0.1)于 2021 年 12 月 29 日創建
PS 這個問題是在回答這個有趣的問題時提出的
uj5u.com熱心網友回復:
有一種方法可以做到這一點,但不是很直觀。這取決于byrow圖例指南中的設定,是否尊重圖例間距(不要問我為什么!)。
library(ggplot2)
ggplot(dplyr::filter(msleep, grepl("^C", order)),
aes(sleep_total, sleep_rem, color = order))
geom_line(na.rm = TRUE)
guides(
color = guide_legend(byrow = TRUE)
)
theme(legend.key = element_rect(color = "black"),
legend.spacing.y = unit(1, "cm"))

由reprex 包( v2.0.0 )于 2021 年 12 月 30 日創建
我曾抱怨 在其他地方提出這是不直觀的建議。
如果想讓標題處于比較正常的位置,可以對主題功能使用如下咒語,其中11pt為默認圖例間距:
legend.title = element_text(
margin = margin(
b = -1 grid::convertUnit(unit(11, "pt"), "cm", valueOnly = TRUE),
unit = "cm")
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397800.html
