플롯 영역에 상대적인 범례 배치, ggplot
여기서 문제는 조금 분명하다고 생각합니다. 범례를 '플로팅 영역'의 왼쪽 상단 모서리에 배치 (잠금)하고 싶습니다. c (0.1,0.13) 등을 사용하는 것은 여러 가지 이유로 옵션이 아닙니다.
좌표가 플로팅 영역에 상대적이되도록 좌표의 기준점을 변경하는 방법이 있습니까?
mtcars$cyl <- factor(mtcars$cyl, labels=c("four","six","eight"))
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.position = c(0, 1), title="Legend placement makes me sad")
건배
업데이트 : opts
더 이상 사용되지 않습니다. 이 답변에theme
설명 된 대로 대신 사용하십시오 .
가이드의 배치는 기본적으로 플롯 영역 (즉, 회색으로 채워진 영역)을 기반으로하지만 양쪽 맞춤은 중앙에 있습니다. 따라서 왼쪽 상단 맞춤을 설정해야합니다.
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.position = c(0, 1),
legend.justification = c(0, 1),
legend.background = theme_rect(colour = NA, fill = "white"),
title="Legend placement makes me happy")
전체 장치 영역에 대해 가이드를 배치하려면 gtable 출력을 조정할 수 있습니다.
p <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.position = c(0, 1),
legend.justification = c(0, 1),
legend.background = theme_rect(colour = "black"),
title="Legend placement makes me happy")
gt <- ggplot_gtable(ggplot_build(p))
nr <- max(gt$layout$b)
nc <- max(gt$layout$r)
gb <- which(gt$layout$name == "guide-box")
gt$layout[gb, 1:4] <- c(1, 1, nr, nc)
grid.newpage()
grid.draw(gt)
업데이트 : opts
더 이상 사용되지 않습니다. 이 답변에theme
설명 된 대로 대신 사용하십시오 .
kohske의 답변을 확장하기 위해 다음 사람이 그것을 우연히 발견하는 것이 조금 더 포괄적입니다.
mtcars$cyl <- factor(mtcars$cyl, labels=c("four","six","eight"))
library(gridExtra)
a <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.justification = c(0, 1), legend.position = c(0, 1), title="Legend is top left")
b <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.justification = c(1, 0), legend.position = c(1, 0), title="Legend is bottom right")
c <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.justification = c(0, 0), legend.position = c(0, 0), title="Legend is bottom left")
d <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) +
opts(legend.justification = c(1, 1), legend.position = c(1, 1), title="Legend is top right")
grid.arrange(a,b,c,d)
나는 비슷한 대답을 찾고 있습니다. 그러나 opts
함수가 더 이상 ggplot2 패키지의 일부가 아님을 발견했습니다 . 더 많은 시간을 검색 한 후 theme
opts와 유사한 작업을 수행 하는 데 사용할 수 있음을 발견했습니다 . 따라서 다른 시간을 최소화하기 위해이 스레드를 편집합니다.
아래는 nzcoops에 의해 작성된 유사한 코드 입니다.
mtcars$cyl <- factor(mtcars$cyl, labels=c("four","six","eight"))
library(gridExtra)
a <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) + labs(title = "Legend is top left") +
theme(legend.justification = c(0, 1), legend.position = c(0, 1))
b <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) + labs(title = "Legend is bottom right") +
theme(legend.justification = c(1, 0), legend.position = c(1, 0))
c <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) + labs(title = "Legend is bottom left") +
theme(legend.justification = c(0, 0), legend.position = c(0, 0))
d <- ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point(aes(colour=cyl)) + labs(title = "Legend is top right") +
theme(legend.justification = c(1, 1), legend.position = c(1, 1))
grid.arrange(a,b,c,d)
이 코드는 정확히 유사한 플롯을 제공합니다.
위의 탁월한 답변을 확장하려면 범례와 상자 외부 사이에 패딩을 추가하려면 legend.box.margin
다음을 사용하십시오 .
# Positions legend at the bottom right, with 50 padding
# between the legend and the outside of the graph.
theme(legend.justification = c(1, 0),
legend.position = c(1, 0),
legend.box.margin=margin(c(50,50,50,50)))
이것은 ggplot2
작성 당시 v2.2.1 의 최신 버전에서 작동합니다 .
참고 URL : https://stackoverflow.com/questions/10747307/legend-placement-ggplot-relative-to-plotting-region
'IT Share you' 카테고리의 다른 글
주어진 두 문자열의 거리 유사성 측정을 계산하는 방법은 무엇입니까? (0) | 2020.12.13 |
---|---|
Xcode에서 특정 방법으로 이동하는 방법이 있습니까? (0) | 2020.12.13 |
두 UIImage 객체를 비교하는 방법 (0) | 2020.12.13 |
값보다 큰 행렬의 모든 값 계산 (0) | 2020.12.13 |
트위터 부트 스트랩 다중 모달 오류 (0) | 2020.12.13 |