当绘制的数据来自两个单独的数据帧时,指定图例中的因子顺序。

时间:2016-09-21 22:04:05

标签: r ggplot2

我有一个数据集,其中一些变量总是具有负值,而一些变量总是具有正值。我想制作一个堆积区域图,其中负值堆叠在x轴下方和上面的正值。我将变量名称作为数据框中特定顺序的因子,我希望在图例中显示。问题是,为了在x轴上方和下方绘制数据,我必须使用geom_area()两次,一次使用我的数据的正子集,一次使用负子集。当我这样做时,它会对图例中的因素进行实时计算,而忽略它们的原始顺序。

include('ggplot2')

test <- data.frame(x=rep(c(1,2,3,4),4), 
                   fact=factor(c(rep('a',4),rep('b',4),rep('c',4),rep('d',4)), 
                               levels=c('c','a','d','b'), ordered=TRUE), 
                   y=c(4,3,2,1,-4,-3,-2,-1,8,6,4,2,-8,-6,-4,-2))

# The legend displays the factors in the order I want (c,a,b,d)
ggplot(data=test, mapping=aes(x=x, y=abs(y)))+
  geom_area(mapping=aes(fill=fact))

# This doesn't work for plotting above and below the x axis, 
# so I have to split it into two different geom_area calls.
ggplot(data=test, mapping=aes(x=x, y=y))+
  geom_area(mapping=aes(fill=fact))

# Factors in legend are now reordered alphabetically, 
# but I want them to be ordered c,a,b,d.
ggplot(data=test, mapping=aes(x=x, y=y))+
  geom_area(data=test[test$y<0,], mapping=aes(fill=fact), stat='identity')+
  geom_area(data=test[test$y>0,], mapping=aes(fill=fact), stat='identity')

如何让图例中的因子显示为我想要的?

1 个答案:

答案 0 :(得分:0)

您可以手动指定breaks

+ scale_fill_hue(breaks = c('c','a','b','d'))