ggplot2 범례를 아래쪽 및 수평으로


109

ggplot2 범례를 플롯의 맨 아래로 이동하고 수평으로 돌리려면 어떻게해야합니까?

샘플 코드 :

library(reshape2) # for melt
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend())

원하는 (대략적인) 결과 : 여기에 이미지 설명 입력


2
7 년 8 개월 후에 마침내이 질문에 대해 원하는 결과를 얻는 방법을 찾았습니다. :) 두 번째 답변으로 스크롤하십시오.
Arthur Yip

답변:


146

범례의 위치를 ​​이동하려면 다음 코드를 사용하십시오.

library(reshape2) # for melt
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend()) +
    theme(legend.position="bottom")

원하는 결과를 얻을 수 있습니다. 하단의 범례


2
하단에 연속 범례 막대를 그릴 수 있는지 알고 있습니까? (숫자가 아니라 상단에 있음). 감사.
Janvb

3
현재 ggplot, 이것은 나에게 경고를 준다 'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1). 교체 optstheme작동합니다.
krlmlr

네, 내부 작업에 변화가있을 것으로 예상합니다ggplot
Shreyas Karnik 2011

10
감가 상각 된 항목을 사용하는 것은 좋지 않습니다. 테마를 사용하여 똑같은 방법으로 할 수 있습니다.+ theme(legend.position='bottom')
by0

안타깝게도 숫자와 색상이 나란히있을 때 약간의 모호함이 있습니다. 이것을 개선하기 위해 여러 시도에서 아래 내 대답을 참조하십시오.
Arthur Yip

37

원하는 결과를 만드는 방법은 다음과 같습니다.

library(reshape2); library(tidyverse)
melt(outer(1:4, 1:4), varnames = c("X1", "X2")) %>%
ggplot() + 
  geom_tile(aes(X1, X2, fill = value)) + 
  scale_fill_continuous(guide = guide_legend()) +
  theme(legend.position="bottom",
        legend.spacing.x = unit(0, 'cm'))+
  guides(fill = guide_legend(label.position = "bottom"))

reprex 패키지 (v0.3.0)에 의해 2019-12-07에 생성됨


편집 : 더 이상 이러한 불완전한 옵션이 필요하지 않지만 참조를 위해 여기에 남겨 둡니다.

당신이 요구 한 것을 정확히 제공하지는 못하지만 매우 근접한 두 가지 불완전한 옵션 (적어도 색상을 합칠 것임).

library(reshape2); library(tidyverse)
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend()) +
 theme(legend.position="bottom", legend.direction="vertical")

p1 + scale_fill_continuous(guide = "colorbar") + theme(legend.position="bottom")

2019-02-28에 reprex 패키지 (v0.2.1)로 생성됨


이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Rohit Gupta 2015 년

지금이 개 불완전한 솔루션을 제공하기 위해 내 대답을 강화했다
아서 깨갱에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.