2017-04-04 1 views
0

다른 변수를 기반으로 색상 및 모양을 지정하는 ggplot2 범례를 병합하는 데 문제가 있습니다. 한 변수는 모양을 지정하고 다른 변수는 색상을 지정합니다. 그러나 범례는 두 개로 나뉩니다 (하나는 모양이 있고 하나는 색이 있음). 두 가지를 병합하는 간단한 방법이 있습니까?ggplot2 범례 병합

샘플 데이터 :

 ID EFFRENT  SQFT Layers FLOORPLAN 
1 10496 3369.196 817.9767 1 BR  1_1_0 
2 10496 4635.274 1242.8750 2BR  2_2_0 
3 10496 5621.419 1656.6250 3BR  3_3_0 
4 10752 2180.625 775.0000 1 BR  1_1_0 
5 10752 2744.991 1100.8620 2BR  2_2_0 
6 11127 2335.705 692.0893 1 BR  1_1_0 
7 11127 2730.000 659.0000 2BR  2_1_0 
8 11127 3272.705 860.2480 2BR  2_2_0 
9 11127 4832.667 1253.0000 3BR  3_2_0 
10 1163 2540.833 700.0000 1 BR  1_1_0 
11 1163 2734.767 820.0000 1 BR 1_1_0_D 
12 1163 2981.783 854.0000 1 BR 1_1_0_L 
13 1163 2987.167 963.0000 2BR  2_2_0 
14 1163 3193.043 1292.0000 2BR 2_2_0_L 

ggplot 코드 : 이것은 전설과 같이 산출

Z <- ggplot(dataset, aes(x=SQFT,y=EFFRENT)) + geom_point() 

# Number of unique floorplans and colorramp 
a <- length(factor(levels(dataset$FLOORPLAN))) 
clr <- c("#814d35","#576df7","#1b9e13","#e166eb","#01dc82","#d13fc1","#9dd755","#7b2ca2","#dcc821","#0277e3","#bcb900","#c982ff","#7edb71","#9d0088","#01a055","#e70082","#009763","#ef274a","#02c0fc","#da5601","#0c9bff","#c59000","#554698","#dac751","#9a0f77","#9b8400","#ff95ee","#4c5804","#dbafff","#b55300","#aebaff","#e6402a","#00886b","#ff4874","#38958a","#ff643a","#b0d094","#af0058","#dfc38d","#89306c","#946100","#ff67a8","#8a3b19","#ffa3cb","#b3003e","#8b628e","#ff665f","#80413e","#ff9886","#ff99a4") 

#Add Shapes and Color 
Z2 <- Z + aes(shape = factor(dataset$Layers)) + 
    geom_point(aes(colour = factor(dataset$FLOORPLAN)), size = 6) + scale_colour_manual(name="Floorplan", values=clr) 


#Modify Axis Titles 
Z3 <-Z2 + theme(axis.title.x = element_text(face="bold", colour="#000000", size=20), 
      axis.text.x = element_text(angle=90, vjust=0.5, size=16)) + theme(axis.title.y = element_text(face="bold", colour="#000000", size=20), 
      axis.text.y = element_text(angle=90, vjust=0.5, size=16)) + labs(x="Square Footage", y="Effective Rent") 

: 나는 모두를 얻을 수 있었으면 해요

Legend

각 항목의 색상 및 모양 (모든 0_ * sam 전자 모양, 모든 1_ * 같은 모양, 등)

나는이 열심히하지 않아야 알고 있지만 나는 해결책이 솔루션은의 FLOORPLAN 변수의 수준을 축소하는 것입니다

답변

0

을 찾을 수 없습니다 귀하의 dataset. forcats 패키지의 fct_collapse 함수는 쉽게이 작업을 수행하지만,이 작업은 많은 작업을 처리하기 때문에 처음 몇 행을 처리 할 수 ​​있습니다. 적용 단지 4 개 가지 색상이있을 것이기 때문에 색상의

library(forcats) 
dataset$FLOORPLAN <- factor(dataset$FLOORPLAN) %>% 
        fct_collapse(0_* = c("0_1_0", "0_1_0_D", etc.), 
            1_* = c("1_1_0", "1_1_0_D", etc.), 
            etc...) 

귀하의 clr 벡터, 그에 따라 개정 될 필요가있을 것이다. 나는 당신에게 당신이 원하는 색을 선택하도록 맡길 것이다. 이미 위에서 사용되는 이후

차트 자체에 관해서

geom_point 층의 통화에서 factor() 함수 호출을 제거 : 그대로

geom_point(aes(colour = FLOORPLAN), size = 6) 

코드의 나머지 부분은 작동합니다. 나는이 라인의 목적으로 혼란 스러워요 :

a <- length(factor(levels(dataset$FLOORPLAN))) 

a 개체가 다른 용도로 사용할 수 있도록 표시되지 않습니다.

+0

감사, 알았어요! 이것은 작동하는 것처럼 보입니다 'a <길이 (factor (levels (dataset $ FLOORPLAN))'는 다른 스크립트에서 남겨졌으며 완전히 불필요합니다. – JNP978

0

당신은 아래 scale_shape_manual으로이 결과를 얻을 수 있습니다 :

Z2 <- Z+aes(shape = factor(dataset$FLOORPLAN)) + 
    geom_point(aes(colour = factor(dataset$FLOORPLAN)), size = 6) + 
    scale_colour_manual(name="Floorplan", values=clr) + 
    scale_shape_manual(name ="Floorplan", 
         breaks=c("1_1_0", 
           "1_1_0_D", 
           "1_1_0_L", 
           "2_1_0", 
           "2_2_0", 
           "2_2_0_L", 
           "3_2_0", 
           "3_3_0"), 
         values=c(16, 
           16, 
           16, 
           17, 
           17, 
           17, 
           15, 
           15)) 

#Modify Axis Titles 
Z3 <-Z2 + theme(axis.title.x = element_text(face="bold", colour="#000000", size=20), 
       axis.text.x = element_text(angle=90, vjust=0.5, size=16)) + theme(axis.title.y = element_text(face="bold", colour="#000000", size=20), 
                        axis.text.y = element_text(angle=90, vjust=0.5, size=16)) + labs(x="Square Footage", y="Effective Rent")