合并ggplot2图例

时间:2017-04-04 16:53:39

标签: r 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_ *相同的形状,所有1_ *相同的形状等)

我知道这应该不难,但我似乎无法找到解决方案

1 个答案:

答案 0 :(得分:0)

解决方案是折叠FLOORPLAN的{​​{1}}变量中的级别。 dataset软件包中的fct_collapse函数可以轻松完成此操作,但这需要编写很多内容,因此我只需要输入前几行即可让您继续使用。

forcats

您的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...) 颜色矢量需要相应修改,因为只有4种颜色可供使用。我会留给您选择您想要的颜色。

关于图表本身,在您调用clr图层时,请移除geom_point函数调用,因为它已在上面使用过:

factor()

其余代码应该按原样运行。我对这一行的目的感到困惑:

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

a <- length(factor(levels(dataset$FLOORPLAN))) 对象似乎没有用于其他任何内容。