2011-02-15 80 views
10

我有一個文本文件(data.csv)中的數據(x,y),我想將其製作爲熱圖。從(x,y)中創建熱圖在R

X Y 
-60 -18 
60 -62 
7 14 
-22 -60 
59 58 
29 22 
-58 -18 
60 -61 
7 14 
-21 -59 
61 59 
29 22 
-57 -18 
-22 -59 
59 60 
29 24 
-56 -17 
61 -60 
8 16 
-20 -58 
62 60 
30 23 

我非常希望能夠導入文本文件並將其保存爲圖像文件(PNG或JPG),即450像素X 200像素。

熱圖需要更多像一個你會發現在谷歌地圖(example here)比矩陣(example here)。

在此先感謝。

+3

這兩個熱圖的具有三維數據 - x,y位置+ z 「的熱」。你有一個z座標,或者一些函數將你的x,y變成第三個值? – Carl 2011-02-15 13:19:19

+0

好點。第三個(z)值將是一個「類型」的位置。讓我們說一個酒店或酒吧。 – NeilG 2011-02-15 17:33:14

回答

12

如果你正在尋找一個密度圖,其中顏色代表在平面上的點的分佈,就可以使用,例如,kde2d功能從MASS庫之後filled.contour

重複的例子:

d <- structure(list(X = c(-60L, 60L, 7L, -22L, 59L, 29L, -58L, 60L, 
7L, -21L, 61L, 29L, -57L, -22L, 59L, 29L, -56L, 61L, 8L, -20L, 
62L, 30L), Y = c(-18L, -62L, 14L, -60L, 58L, 22L, -18L, -61L, 
14L, -59L, 59L, 22L, -18L, -59L, 60L, 24L, -17L, -60L, 16L, -58L, 
60L, 23L)), .Names = c("X", "Y"), class = "data.frame", row.names = c(NA, 
-22L)) 
require(MASS) 
dens <- kde2d(d$X, d$Y, h=75, n=50) #overrode default bandwidth 
filled.contour(dens) 

Filled contour plot

還有很多其他的功能,這將使你給出的密度的情節。

2

有一個整體CRAN Spatial view用大量的好東西,包括2D內核。這與splancs包的例子。

data(bodmin) 
plot(bodmin$poly,asp=1,type="n") 
image(kernel2d(as.points(bodmin),bodmin$poly, h0=2,nx=100,ny=100), 
     add=TRUE, col=terrain.colors(20)) 
pointmap(as.points(bodmin),add=TRUE) 
polymap(bodmin$poly,add=TRUE) 
bodmin.xy<-coordinates(bodmin[1:2]) 
apply(bodmin$poly,2,range) 
grd1<-GridTopology(cellcentre.offset=c(-5.2,-11.5),cellsize=c(0.2,0.2),cells.dim=c(100,100)) 
k100<-spkernel2d(bodmin.xy,bodmin$poly,h0=1,grd1) 
k150<-spkernel2d(bodmin.xy,bodmin$poly,h0=1.5,grd1) 
k200<-spkernel2d(bodmin.xy,bodmin$poly,h0=2,grd1) 
k250<-spkernel2d(bodmin.xy,bodmin$poly,h0=2.5,grd1) 
if(.sp_lt_0.9()){ 
    df<-AttributeList(list(k100=k100,k150=k150,k200=k200,k250=k250)) 
} else{ 
    df<-data.frame(k100=k100,k150=k150,k200=k200,k250=k250) 
} 
kernels<-SpatialGridDataFrame(grd1,data=df) 
spplot(kernels,checkEmptyRC=FALSE,col.regions=terrain.colors(16),cuts=15) 

enter image description here

下面是一個例子:

kern.obj <- structure(c(-161.913250909479, 154.013482116162, 31.6474639061300, 
17.7340639366637, -102.170823111156, 17.6809699563749, 90.505728795223, 
143.854796792441, -70.1806511117134, 230.600354761065, 133.500211485414, 
-225.74140063979, 220.599384351733, -55.5956512970632, 128.631103577179, 
-36.9382693513206, 86.1151116370548, -67.9572171234925, 138.313636950703, 
59.4122360493993, -128.418347257186, 28.4313444162254, -253.438542232118, 
-2.62936998134802, 96.6705573949275, 126.350347596454, -76.3053490233138, 
-98.1667749493097, -132.615954657406, -239.003804126569, -32.052834858324, 
152.055005227299, -171.132473363859, -96.0272921226682, -91.4859761718545, 
172.662664785850, 92.3258005260648, -9.33884441249779, -24.4260189034222, 
-171.435971200881, 84.9052731383744, -171.768339197942, -13.5871193263486, 
-51.839925496188, -193.00283491136, 57.1126055897217, -40.890549093622, 
83.600134171797, 6.66515671609591, -261.487889322599, 138.624659821426, 
158.911075756538, 111.598989561161, 62.6150728399137, -155.366548557697, 
95.9501552130317, -32.0820888905296, -85.4929337702259, -178.010310820340, 
100.526315864149, -190.431234842843, 223.959168312304, -10.693030515916, 
-155.820490522984, 87.7527496146106, 293.991051801515, -69.1568338969259, 
77.0440461941863, -137.088789092018, -284.434533670747, -52.9437134391306, 
129.855822783810, 147.208098412254, -144.394565933009, 11.1193096498363, 
-26.946328, 36.3402764034715, -27.5111672678245, 161.017920279498, 
133.961438546933, -139.924061267615, -194.861248844460, -138.902485043792, 
-59.6746738747854, -193.856125217724, 58.9319665388044, -151.870347293954, 
185.500357832384, 77.8198201646078, 217.406148533358, 125.978806993972, 
-96.8970637852723, 85.2079461295587, -71.5845844358825, 90.0263897196243, 
-3.85398693321446, -233.945188963933, -252.371240484100, -152.282817449886, 
-175.448833834566, 74.8285138048232, 218.884530197829, -65.9526397939771, 
113.776709279045, -69.4176647812128, -196.919950610027, 268.779812799767, 
119.294722331688, 272.239590017125, -161.720151454210, -16.8415614869446, 
-13.6117741931230, -96.0124779492617, 157.184316962957, 188.061125110835, 
-214.437550725415, 121.667246008292, 89.747676299885, -4.44232751615345, 
-106.699166027829, -261.718519963324, -42.1719799283892, -78.4863225650042, 
204.811030067503, 265.774235548452, 38.5583057999611, -239.476124290377, 
231.875250348821, 135.243163537234, -42.7497774828225, -59.7301519475877, 
-2.99901310354471, -240.498538082466, -109.713196987286, 172.524304641411, 
113.648047484457, -221.150079695508, 131.948393024504, 62.1528406161815, 
-8.31053741276264, -76.1619768105447, 157.933613704517, -42.225355328992, 
208.729289704934, 10.0781018380076, 98.7709498498589, -74.8700814787298, 
-215.313404565677, -87.6694556325674, -139.495075587183, -28.3679623156786, 
-76.2799751479179, -138.629644783214, -164.171522296965, 16.3864661939442, 
-109.221789333969, -49.0070185158402, -23.0688956100494, 54.3438952881843, 
-145.427243504673, -18.4494345914572, 14.391646720469, -200.727640092373, 
187.278914311901, -75.3078812733293, 4.16369824670255, -191.299003595486, 
169.710802193731, -103.791763912886, 32.9403738956898, -91.6615933645517, 
-222.505887318403, 49.3231621105224, -151.363900210708, -23.9421324804425, 
-207.101033208892, 169.309269497171, -250.131661305204, 11.1456824932247, 
-193.683278560638, -66.6569401044399, -139.672750141472, -115.024601574987, 
-198.41345124878, -205.971520487219, 104.227339709178, 162.442225730047, 
-167.216443363577, -100.033209286630, 152.823372976854, -191.260906308889, 
-234.539421927184, 213.049413822591, 130.761165590957, -234.716210095212, 
6.07512393034995, -49.286244995892, -56.5862323623151, -50.971424812451, 
-168.812829069793), .Dim = c(100L, 2L), .Dimnames = list(NULL, 
    c("x", "y"))) 

circpol <- structure(c(37.674311717588, 75.1999401385825, 112.428788751435, 
149.213932298913, 185.410196624968, 220.874731610807, 255.467574939044, 
289.052204461029, 321.496076987398, 352.671151375484, 382.454393849214, 
410.728263557213, 437.381176452847, 462.307945665474, 485.410196624968, 
506.596755301209, 525.784008026318, 542.896231479612, 557.865891532951, 
570.633909777092, 581.149896677179, 589.372350437213, 595.268820788687, 
598.816037056963, 600, 598.816037056963, 595.268820788687, 589.372350437213, 
581.149896677179, 570.633909777092, 557.865891532951, 542.896231479612, 
525.784008026318, 506.596755301209, 485.410196624968, 462.307945665474, 
437.381176452847, 410.728263557213, 382.454393849214, 352.671151375484, 
321.496076987398, 289.052204461029, 255.467574939043, 220.874731610807, 
185.410196624968, 149.213932298913, 112.428788751435, 75.1999401385824, 
37.6743117175879, -1.92977144680695e-13, -37.674311717588, -75.1999401385826, 
-112.428788751435, -149.213932298913, -185.410196624969, -220.874731610807, 
-255.467574939044, -289.052204461029, -321.496076987398, -352.671151375484, 
-382.454393849214, -410.728263557213, -437.381176452847, -462.307945665474, 
-485.410196624968, -506.596755301209, -525.784008026318, -542.896231479612, 
-557.865891532951, -570.633909777092, -581.149896677179, -589.372350437213, 
-595.268820788687, -598.816037056963, -600, -598.816037056963, 
-595.268820788687, -589.372350437213, -581.149896677179, -570.633909777092, 
-557.865891532951, -542.896231479612, -525.784008026318, -506.596755301209, 
-485.410196624968, -462.307945665473, -437.381176452847, -410.728263557213, 
-382.454393849214, -352.671151375484, -321.496076987398, -289.052204461029, 
-255.467574939043, -220.874731610807, -185.410196624968, -149.213932298913, 
-112.428788751435, -75.1999401385823, -37.6743117175880, -1.46952762458685e-13, 
37.674311717588, 598.816037056963, 595.268820788687, 589.372350437213, 
581.149896677179, 570.633909777092, 557.865891532951, 542.896231479612, 
525.784008026318, 506.596755301209, 485.410196624968, 462.307945665473, 
437.381176452847, 410.728263557213, 382.454393849214, 352.671151375484, 
321.496076987398, 289.052204461029, 255.467574939044, 220.874731610807, 
185.410196624968, 149.213932298913, 112.428788751435, 75.1999401385825, 
37.674311717588, -9.64885723403475e-14, -37.6743117175880, -75.1999401385826, 
-112.428788751435, -149.213932298913, -185.410196624969, -220.874731610807, 
-255.467574939044, -289.052204461029, -321.496076987398, -352.671151375484, 
-382.454393849214, -410.728263557213, -437.381176452847, -462.307945665474, 
-485.410196624968, -506.596755301209, -525.784008026318, -542.896231479612, 
-557.865891532951, -570.633909777092, -581.149896677179, -589.372350437213, 
-595.268820788687, -598.816037056963, -600, -598.816037056963, 
-595.268820788687, -589.372350437213, -581.149896677179, -570.633909777092, 
-557.865891532951, -542.896231479612, -525.784008026318, -506.596755301209, 
-485.410196624968, -462.307945665473, -437.381176452847, -410.728263557213, 
-382.454393849214, -352.671151375484, -321.496076987398, -289.052204461029, 
-255.467574939043, -220.874731610807, -185.410196624969, -149.213932298913, 
-112.428788751435, -75.1999401385822, -37.6743117175879, -1.10214571844014e-13, 
37.6743117175882, 75.1999401385825, 112.428788751435, 149.213932298913, 
185.410196624968, 220.874731610807, 255.467574939044, 289.052204461029, 
321.496076987398, 352.671151375484, 382.454393849214, 410.728263557213, 
437.381176452847, 462.307945665474, 485.410196624969, 506.596755301209, 
525.784008026318, 542.896231479612, 557.865891532951, 570.633909777092, 
581.149896677179, 589.372350437213, 595.268820788687, 598.816037056963, 
600, 598.816037056963), .Dim = c(101L, 2L), .Dimnames = list(
    NULL, c("x", "y"))) 

grd <- GridTopology(cellcentre.offset = c(-600, -600), cellsize = c(1, 1), cells.dim = c(1200, 1200)) 
obj <- kernel2d(pts = kern.obj, poly = circpol, h0 = 100, nx = 600, ny = 600, kernel='quartic') 

plot(kern.obj[, "x"], kern.obj[, "y"], xlim = c(-600, 600), ylim = c(-600, 600)) 
image(obj, add = TRUE, col = terrain.colors(20)) 

enter image description here