2012-12-05 73 views
1

我试图重现一个堆叠的时间序列图,它显示了银行资产负债表的组成和规模如何随时间而变化。它应该是这个样子:使用ggplot2和geom_area堆积的负/正时间序列

Balance Sheet

哪里去资产x轴和负债上面走在它下面。

到目前为止,我已经能够重现图中的每个成功的一半使用ggplot()

# plot assets stack 
assets.plot <- ggplot(assetsm, aes(x=dates, y=value, fill=variable)) + 
    geom_area() 


# plot liability stack 
liabiln.plot <- ggplot(liabilnm, aes(x=dates, y=value, fill=variable)) + 
    geom_area() 

这给:

Assets (left) and liabilities (right)

但是当我把它们加起来,不顺心错:

# plot whole bs 
bs.plot <- ggplot(bsm, aes(x=dates, y=value, fill=variable)) + 
    geom_area() 

这给:

enter image description here

注意到它旁边的色标和上面的图片中,可以看到:

  1. 只有一半的变量显示(从V19开始)。
  2. 这些变量恰好与“负债”一半的数据(所有这些都应该是负数)一致。
  3. x上每个点上堆栈的总高度等于上图中负载堆栈的总高度,但不再从y = 0开始 - 它落在y轴的两侧。

我不知道发生了什么,从我的代码丢失造成这一点 - 我已经做position = "stack"明确,以及试图回答this question(相同的结果)左右摆弄,我现在在我的机智的很结束。

我认为这可能是一个数据问题,所以我上传了数据here。如果我可以让问题更清楚或提供额外的细节,请告诉我。

回答

3

我不能完全解释你在此刻看到的行为,但是当我做顶/底式地块喜欢这些,我倾向于使用独立的数据帧的独立层电话:

ggplot() + 
    geom_area(data = assetsm, aes(x=dates, y=value, fill=variable)) + 
    geom_area(data = liabilnm, aes(x=dates, y=value, fill=variable)) 

这似乎看起来像你以后:

enter image description here

+0

奏效第一次,谢谢。它真的只是使用独立的数据框架来改变它们吗? – steve

+1

@steve我认为(但我不是100%肯定)这个问题与ggplot如何做堆栈有关,这是一个比你想象的更难的问题,从编写绘图函数的角度来看神奇地预见了广泛的用户输入。 – joran