如何使用数据框在R中创建热图

时间:2014-11-25 14:07:08

标签: r dataframe heatmap matrix-multiplication

我想生成一些数据的热图,以便可以间接地看到密度。 但问题是数据必须从xml文件中解析并保存在数据框中。我知道热图需要一个矩阵作为源,我试图将我的数据帧转换为这样一个矩阵。但是,热图的结果是,让我们说它看起来不太好。你能帮帮我吗?

pdf("edge_connectivity_pdftest3.pdf", width = 7, height = 7)


library(XML)
library(ggplot2)
library(plyr)
library(plotrix)

twentyfive <- '<?xml version="1.0" encoding="UTF-8"?>
<MappingTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://sourceforge.net/projects/alevin/ ./Alevin.xsd" xmlns="http://sourceforge.net/projects/alevin/" name="AdvSubgraphTestGenerator2">
<TestGenerator className="tests.generatorTests.AdvSubgraphTestRunner"/>
<ScenarioResult>
<ScenarioParameter name="Waxman_alpha" value="0.5"/>
<ScenarioParameter name="Waxman_beta" value="0.5"/>
<ScenarioParameter name="NumVNodesPerNet" value="6.0"/>
<ScenarioParameter name="NumVNets" value="1.0"/>
<ScenarioParameter name="SNetSize" value="25.0"/>
<ScenarioParameter name="Min_BW_Dem" value="10.0"/>
<ScenarioParameter name="Max_BW_Dem" value="50.0"/>
<ScenarioParameter name="Min_BW_Res" value="30.0"/>
<ScenarioParameter name="Max_BW_Res" value="100.0"/>
<ScenarioParameter name="Min_CPU_Dem" value="10.0"/>
<ScenarioParameter name="Max_CPU_Dem" value="50.0"/>
<ScenarioParameter name="Min_CPU_Res" value="30.0"/>
<ScenarioParameter name="Max_CPU_Res" value="100.0"/>
<ScenarioParameter name="NumberOfRun" value="1.0"/>
<ScenarioMetric name="Runtime" result="276.0"/>
<ScenarioMetric name="RejectedNetworksNumber" result="0.0"/>
<ScenarioMetric name="VertexConnectivity2" result="2.0"/>
<ScenarioMetric name="AlgebraicConnectivity2" result="1.6936353132256952"/>
<ScenarioMetric name="EdgeConnectivity2" result="2.0"/>
<ScenarioMetric name="FabianianCoefficient2" result="1.0"/>
<ScenarioMetric name="SpectralGap2" result="0.7100219009060647"/>
<ScenarioMetric name="StochasticMetric2" result="1.1567175867487764"/>
<ScenarioMetric name="SolelyForwardingHops" result="0.0"/>
<ScenarioMetric name="VertexConnectivity0" result="2.0"/>
<ScenarioMetric name="AlgebraicConnectivity0" result="0.7102866433077278"/>
<ScenarioMetric name="EdgeConnectivity0" result="2.0"/>
<ScenarioMetric name="FabianianCoefficient0" result="1.0"/>
<ScenarioMetric name="SpectralGap0" result="2.0307953380742054"/>
<ScenarioMetric name="StochasticMetric0" result="0.8828275034293551"/>
</ScenarioResult>
<ScenarioResult>
<ScenarioParameter name="Waxman_alpha" value="0.5"/>
<ScenarioParameter name="Waxman_beta" value="0.5"/>
<ScenarioParameter name="NumVNodesPerNet" value="11.0"/>
<ScenarioParameter name="NumVNets" value="1.0"/>
<ScenarioParameter name="SNetSize" value="25.0"/>
<ScenarioParameter name="Min_BW_Dem" value="10.0"/>
<ScenarioParameter name="Max_BW_Dem" value="50.0"/>
<ScenarioParameter name="Min_BW_Res" value="30.0"/>
<ScenarioParameter name="Max_BW_Res" value="100.0"/>
<ScenarioParameter name="Min_CPU_Dem" value="10.0"/>
<ScenarioParameter name="Max_CPU_Dem" value="50.0"/>
<ScenarioParameter name="Min_CPU_Res" value="30.0"/>
<ScenarioParameter name="Max_CPU_Res" value="100.0"/>
<ScenarioParameter name="NumberOfRun" value="20.0"/>
<ScenarioMetric name="Runtime" result="24.0"/>
<ScenarioMetric name="RejectedNetworksNumber" result="0.0"/>
<ScenarioMetric name="VertexConnectivity2" result="2.0"/>
<ScenarioMetric name="AlgebraicConnectivity2" result="1.7460253697709436"/>
<ScenarioMetric name="EdgeConnectivity2" result="2.0"/>
<ScenarioMetric name="FabianianCoefficient2" result="1.0"/>
<ScenarioMetric name="SpectralGap2" result="1.576112684769838"/>
<ScenarioMetric name="StochasticMetric2" result="2.350669297391729"/>
<ScenarioMetric name="SolelyForwardingHops" result="0.0"/>
<ScenarioMetric name="VertexConnectivity0" result="2.0"/>
<ScenarioMetric name="AlgebraicConnectivity0" result="2.0118905996166037"/>
<ScenarioMetric name="EdgeConnectivity0" result="2.0"/>
<ScenarioMetric name="FabianianCoefficient0" result="1.0"/>
<ScenarioMetric name="SpectralGap0" result="2.515476723671439"/>
<ScenarioMetric name="StochasticMetric0" result="2.0488743711637802"/>
</ScenarioResult>
</MappingTest>'


test_twentyfive <- xmlParse(twentyfive)
vc2 = as.numeric(test_twentyfive['//*[@name = "EdgeConnectivity2"]', fun = function(x) xmlGetAttr(x, "result")])
number = as.numeric(test_twentyfive['//*[@name = "NumVNodesPerNet"]', fun = function(x) xmlGetAttr(x, "value")])
vc0 = as.numeric(test_twentyfive['//*[@name = "EdgeConnectivity0"]', fun = function(x) xmlGetAttr(x, "result")])

df2 <- data.frame(number,vc2)
df0 <- data.frame(number,vc0)
qrange50 <- range(0,vc2,vc0)

matrix <- data.matrix(df2)
heatmap( matrix, Rowv=NA, Colv=NA, col = heat.colors(256),  margins=c(5,10))

2 个答案:

答案 0 :(得分:0)

有一个名为heatmap.plus的新软件包可以帮到你。它允许比原始热图包更广泛的输入格式。文档在这里:http://cran.r-project.org/web/packages/heatmap.plus/heatmap.plus.pdf

你也可以使用ggplot2做很好的热图。 geom_tile表达式是您想要的表达式。这是一个示例(带代码),可能看起来非常接近您要实现的输出:http://rpubs.com/daattali/heatmapsGgplotVsLattice

答案 1 :(得分:0)

这是一个关于美学的问题,所以这完全取决于你,但这看起来“好”吗?

ggplot(df2,aes(number,vc0,fill=number))+
geom_tile()+
scale_fill_continuous(low="white",high="red")

enter image description here