在ggplot2中为矩形颜色创建图例

时间:2014-07-11 19:23:59

标签: r ggplot2 legend

所以我尝试用ggplot2做一些独特的东西。我根据他们在分布的标准偏差中的分数对用户进行评分,然后根据他们的范围在他们的分数上放置不同颜色的矩形。在这种情况下,平均值的1 + SD为高,-1或更低的平均值SD低,其他任何东西都是中等。

我要做的是为矩形创建一个图例,说明每种颜色的范围。

这是一个示例数据框和代码

df <- data.frame(scale = factor(c("Self-Awareness","Enthusiasm","Composure","Assuredness","Sincerity")), 
                 scores = c(0.18,-3.0,0.1,1.3,0.67))

base<- ggplot(data=df, aes(x=scale, y=scores,ymin=-3.0,ymax=3.0,group=1))  + 
         stat_identity(geom="tile",width=0.8,fill=scale) + 
         geom_hline(aes(yintercept=-3.0),color="white", alpha=0.1) + 
         geom_hline(aes(yintercept=3.0),color="white", alpha=0.1)

我在第二部分做了一些黑客,我在顶部和底部插入了线条,因此图形可以正确缩放而不是放大。如果有更好的方法,请告诉我

base2<- base + 
         geom_rect(xmin=0.6, xmax= 1.4, ymin=1, ymax= 3, alpha=0.1,fill="#D53AFF") + 
         geom_rect(xmin=1.6, xmax= 2.4, ymin=-1, ymax= 1, alpha=0.1,fill="#278FF7") + 
         geom_rect(xmin=2.6, xmax= 3.4, ymin=-3, ymax= -1, alpha=0.1,fill="#2DF5F9") + 
         geom_rect(xmin=4.6, xmax= 5.4, ymin=-1, ymax= 1, alpha=0.1,fill="#278FF7") + 
         geom_rect(xmin=3.6, xmax= 4.4, ymin=-1, ymax= 1, alpha=0.1,fill="#278FF7")

所以我想要一个传说,说#D53AFF的范围是&#34;高&#34;,#278FF7的范围是&#34;中&#34; #278FF7的范围是&#34;低&#34;。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

ggplot2 中的所有内容都围绕将数据放在单个数据框中并将变量映射到美学:

rect_df <- data.frame(xmin = c(0.6,1.6,2.6,4.6,3.6),
                      xmax = c(1.4,2.4,3.4,5.4,4.4),
                      ymin = c(1,-1,-3,-1,-1),
                      ymax = c(3,1,-1,1,1),
                      grp = factor(c('High','Medium','Low','Medium','Medium'),
                                   levels = c(c('Low','Medium','High'))))

base + 
    geom_rect(data = rect_df,aes(x = NULL,y = NULL,xmin = xmin,xmax = xmax,ymin = ymin,ymax = ymax,fill = grp),
                alpha = 0.5) + 
    scale_fill_manual(values = c('#2DF5F9','#278FF7','#D53Aff'))