2011-08-29 59 views
3

我有一个三列的数据框,我想制作数据的图像/热图。在矩阵和图像()或热图中使用的分级数据()

三列是PE,VIX,并用PE和VIX存在x和y RET和RET是ž。

有220条线路中的数据帧,所以我想仓如果可能的数据,该范围如下。

为任何建议如何bin中的x和y数据,并且还在图像中创建中使用的矩阵()?

> range(matr$pe) 
[1] 13.32 44.20 
> range(matr$vix) 
[1] 10.42 59.89 
> range(matr$ret) 
[1] -0.09274936 0.04693118 
> class(matr) 
[1] "data.frame" 
> head(matr) 
    pe vix   ret 
1 20.86 13.16 -0.002931561 
2 20.46 12.53 -0.003546889 
3 20.52 12.42 0.006339165 
4 20.61 13.47 0.009683174 
5 20.57 11.26 -0.002666668 
6 20.81 11.73 0.002895003 

回答

3

这就是我最终做的。我使用akima包中的interp()函数来创建适当的合并矩阵对象。它似乎在完成数据框的分档和“母校对”工作。在一个侧面说明,在为了与一个传奇的热图,我结束了使用image.plot()方法领域包。这里的 代码:

par(bg = 3) 
image.plot(s,xlab="P/E Ratio", ylab="VIX", 
    main="Contour Map of SPY Returns vs P/E Ratio and Vix") 
abline(v=(seq(0,100,5)), col=6, lty="dotted") 
abline(h=(seq(0,100,5)), col=6, lty="dotted") 
contour(s, add=TRUE) 

及其产品有兴趣的人士: enter image description here

感谢大家对他们的帮助和建议。

1

你可以使用例如cut是这样的:

matr$binnedpe<-cut(matr$pe, breaks=10) 
matr$binnedvix<-cut(matr$vix, breaks=10) 

接下来,你可以使用例如ddply(从包装plyr),以获得每个仓的手段:

binneddata<-ddply(matr, .(binnedpe, binnedvix), function(d){c(d$binnendpe, d$binnedvix, mean(d$ret))}) 

最后,使用这最后data.frame提请热图。我还没有测试过上述任何一项,但它应该足够接近你的目标。

1

你应该旋转光栅包。特别是,函数rasterfromXYZ()应该完成你想要的大部分。使用基础图形工具或光栅软件包很容易为光栅对象设置“热图”颜色范围。