ggplot2에서 범례 항목 사이의 간격을 변경할 수 있는 방법이 있습니까?
ggplot2에서 범례 항목 사이의 간격을 변경할 수 있는 방법이 있습니까?나는 현재 가지고 있습니다.
legend.position ="top"
수평 범례가 자동으로 생성됩니다.하지만 물건들의 간격이 매우 가까워서 어떻게 더 간격을 두어야 할지 궁금합니다.
ggplot2 v3.0.0
2018년 7월에 출시된 제품에는 수정할 작업 옵션이 있습니다.legend.spacing.x
,legend.spacing.y
그리고.legend.text
.
2021년 12월 업데이트 - 만들 내용legend.spacing.y
작업, 설정해야 합니다.byrow = TRUE
해당 guide_dll에 있습니다.이 스레드도 참조하십시오.아래의 예.
예:범례 키 사이의 수평 간격 증가
library(ggplot2)
ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) +
geom_bar() +
coord_flip() +
scale_fill_brewer("Cyl", palette = "Dark2") +
theme_minimal(base_size = 14) +
theme(legend.position = 'top',
legend.spacing.x = unit(1.0, 'cm'))
참고: 범례 텍스트의 오른쪽으로만 간격을 확장하려면 다음을 사용합니다.
예:수직 간격 증가(마음)byrow = TRUE
)
library(ggplot2)
ggplot(mtcars, aes(y = factor(cyl), fill = factor(cyl))) +
geom_bar() +
theme(legend.spacing.y = unit(1.0, 'cm')) +
## important additional element
guides(fill = guide_legend(byrow = TRUE))
예: 범례 키 레이블을 아래로 이동하고 수직 간격을 늘립니다.
ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) +
geom_bar() +
coord_flip() +
scale_fill_brewer("Cyl", palette = "Dark2") +
theme_minimal(base_size = 14) +
theme(legend.position = 'top',
legend.spacing.x = unit(1.0, 'cm'),
legend.text = element_text(margin = margin(t = 10))) +
guides(fill = guide_legend(title = "Cyl",
label.position = "bottom",
title.position = "left", title.vjust = 1))
예: 용scale_fill_xxx
&guide_colorbar
ggplot(mtcars, aes(mpg, wt)) +
geom_point(aes(fill = hp), pch = I(21), size = 5)+
scale_fill_viridis_c(guide = FALSE) +
theme_classic(base_size = 14) +
theme(legend.position = 'top',
legend.spacing.x = unit(0.5, 'cm'),
legend.text = element_text(margin = margin(t = 10))) +
guides(fill = guide_colorbar(title = "HP",
label.position = "bottom",
title.position = "left", title.vjust = 1,
# draw border around the legend
frame.colour = "black",
barwidth = 15,
barheight = 1.5))
아래는 구식이지만 호기심 많은 사람들을 위해 남겨져 있습니다.
수직 범례의 경우, 설정legend.key.size
범례 키의 크기만 증가하고 범례 키 사이의 수직 공간은 증가하지 않습니다.
ggplot(mtcars) +
aes(x = cyl, fill = factor(cyl)) +
geom_bar() +
scale_fill_brewer("Cyl", palette = "Dark2") +
theme_minimal(base_size = 14) +
theme(legend.key.size = unit(1, "cm"))
범례 키 사이의 거리를 증가시키기 위해, 의 수정legend-draw.r
기능이 필요합니다.자세한 내용은 이 문제를 참조하십시오.
# function to increase vertical spacing between legend keys
# @clauswilke
draw_key_polygon3 <- function(data, params, size) {
lwd <- min(data$size, min(size) / 4)
grid::rectGrob(
width = grid::unit(0.6, "npc"),
height = grid::unit(0.6, "npc"),
gp = grid::gpar(
col = data$colour,
fill = alpha(data$fill, data$alpha),
lty = data$linetype,
lwd = lwd * .pt,
linejoin = "mitre"
))
}
### this step is not needed anymore per tjebo's comment below
### see also: https://ggplot2.tidyverse.org/reference/draw_key.html
# register new key drawing function,
# the effect is global & persistent throughout the R session
# GeomBar$draw_key = draw_key_polygon3
ggplot(mtcars) +
aes(x = cyl, fill = factor(cyl)) +
geom_bar(key_glyph = "polygon3") +
scale_fill_brewer("Cyl", palette = "Dark2") +
theme_minimal(base_size = 14) +
theme(legend.key = element_rect(color = NA, fill = NA),
legend.key.size = unit(1.5, "cm")) +
theme(legend.title.align = 0.5)
가장 좋은 방법은guide_legend
이내에guides
:
p + guides(fill=guide_legend(
keywidth=0.1,
keyheight=0.1,
default.unit="inch")
)
의 사용에 주의합니다.default.unit
적재할 필요 없음grid
꾸러미
수평 범례에서 공백을 추가하고 레이블에 공백을 추가하는 데 사용하는 간단한 수정입니다(아래 발췌 참조).
scale_fill_manual(values=c("red","blue","white"),
labels=c("Label of category 1 ",
"Label of category 2 ",
"Label of category 3"))
범례의 항목 사이에 간격을 추가하려면 테마 요소의 여백 조정legend.text
.
각 범례 레이블의 오른쪽에 30pt의 공간을 추가하려면(수평 범례에 유용할 수 있음):
p + theme(legend.text = element_text(
margin = margin(r = 30, unit = "pt")))
각 범례 레이블의 왼쪽에 30pt의 공간을 추가하려면(수직 범례에 유용할 수 있음):
p + theme(legend.text = element_text(
margin = margin(l = 30, unit = "pt")))
당분간ggplot2
물건p
키워드는.legend.text
그리고.margin
.
[편집 관련 참고:이 답변이 처음 게시되었을 때 버그가 있었습니다.이제 버그가 수정되었습니다]
이제는opts
에서 더 이상 사용되지 않습니다.ggplot2
패키지, 함수theme
대신 다음을 사용해야 합니다.
library(grid) # for unit()
... + theme(legend.key.height=unit(3,"line"))
... + theme(legend.key.width=unit(3,"line"))
(2018년) 가장 좋은 접근 방식은 다음과 같습니다.legend.key.size
의 밑에theme
물건.(예: 여기를 참조하십시오)
#Set-up:
library(ggplot2)
library(gridExtra)
gp <- ggplot(data = mtcars, aes(mpg, cyl, colour = factor(cyl))) +
geom_point()
다음을 사용하는 경우에는 매우 간단합니다.
gpbw <- gp + theme_bw()
#Change spacing size:
g1bw <- gpbw + theme(legend.key.size = unit(0, 'lines'))
g2bw <- gpbw + theme(legend.key.size = unit(1.5, 'lines'))
g3bw <- gpbw + theme(legend.key.size = unit(3, 'lines'))
grid.arrange(g1bw,g2bw,g3bw,nrow=3)
그러나 그렇지 않은 경우(예: 범례 기호에 회색 배경이 필요한 경우)에는 이 작업이 제대로 수행되지 않습니다.
g1 <- gp + theme(legend.key.size = unit(0, 'lines'))
g2 <- gp + theme(legend.key.size = unit(1.5, 'lines'))
g3 <- gp + theme(legend.key.size = unit(3, 'lines'))
grid.arrange(g1,g2,g3,nrow=3)
#Notice that the legend symbol squares get bigger (that's what legend.key.size does).
#Let's [indirectly] "control" that, too:
gp2 <- g3
g4 <- gp2 + theme(legend.key = element_rect(size = 1))
g5 <- gp2 + theme(legend.key = element_rect(size = 3))
g6 <- gp2 + theme(legend.key = element_rect(size = 10))
grid.arrange(g4,g5,g6,nrow=3) #see picture below, left
흰색 사각형은 범례 제목을 차단하기 시작합니다(그리고 값을 계속 증가시키면 그래프 자체도 차단됩니다).
#This shows you why:
gt <- gp2 + theme(legend.key = element_rect(size = 10,color = 'yellow' ))
위의 문제를 해결할 방법을 찾지 못했습니다.의견 있으시면 댓글로 알려주시면 업데이트 하겠습니다!
- 사용하여 물건을 다시 층을 형성하는 방법이 있는지 궁금합니다.
$layers
...
ggplot2에 대한 Koshke의 작업과 그의 블로그(Koshke의 블로그)에서.
... + theme(legend.key.height=unit(3,"line")) # Change 3 to X
... + theme(legend.key.width=unit(3,"line")) # Change 3 to X
형theme_get()
콘솔에서 다른 편집 가능한 범례 속성을 볼 수 있습니다.
다음 중 하나를 사용합니다.
legend.spacing = unit(1,"cm")
legend.spacing.x = unit(1,"cm")
legend.spacing.y = unit(1,"cm")
언급URL : https://stackoverflow.com/questions/11366964/is-there-a-way-to-change-the-spacing-between-legend-items-in-ggplot2
'programing' 카테고리의 다른 글
오류가 발생하는 이유를 알 수 있는 사람이 있습니까? [속성 오류: 'list' 개체에 'encode' 속성이 없습니다.] (0) | 2023.06.08 |
---|---|
왜 C는 C99 이전에 부울 데이터 유형이 없었습니까? (0) | 2023.06.08 |
Larvel 5.4 애플리케이션 내에서 Vuex 상태를 초기화하려면 어떻게 해야 합니까? (0) | 2023.06.08 |
":key => "value"와 "key:value" 해시 표기법 사이에 차이점이 있습니까? (0) | 2023.06.08 |
논리적 조건을 기준으로 data.frame 행 필터링 (0) | 2023.06.08 |