tm_shape(House.Points) + tm_bubbles(size = "Price", col = "Price", palette = "Purples", style = "quantile", legend.size.show = FALSE, title.col = "House Prices (£)")
时间: 2024-02-14 13:09:40 浏览: 85
这是一个R语言的命令,用于在地图上绘制气泡图,并且根据点的属性值进行颜色和大小填充。
首先,tm_shape(House.Points)函数表示使用House.Points这个点数据对象作为图层。
其次,tm_bubbles()函数用于画出气泡图,并且根据点的属性值进行颜色和大小的填充。其中,size = "Price"表示使用“Price”这个属性值来确定气泡的大小;col = "Price"表示使用“Price”这个属性值来确定气泡的颜色;palette = "Purples"表示使用“Purples”这个调色板来填充颜色;style = "quantile"表示使用分位数来确定颜色填充的范围;legend.size.show = FALSE表示不显示气泡大小的图例;title.col = "House Prices (£)"表示添加一个标题为“House Prices (£)”来说明颜色填充的属性值。
通过这些命令的组合,我们可以在地图上绘制出房屋价格的分布情况,并且可以通过气泡大小和颜色来区分不同的价格范围。这个图层可以和其他图层进行叠加,以便更加全面地展示地理空间数据的特征。
相关问题
解释下面代码 addBubble: function (bubble) { var thisBubble = this.getBubble(bubble.x, bubble.y); thisBubble.color = bubble.color; }, setBubble: function (x, y, color) { this.getBubble(x, y).color = color; }, getBubble: function (x, y) { if (x < 0 || y < 0 || x > game.cellCount || y > game.cellCount) return null; return this.bubbles[y][x]; }, isEmpty: function (x, y) { var bubble = this.getBubble(x, y); return !bubble.color; }, }; var Cell = function (x, y) { this.x = x; this.y = y; } var Bubble = function (x, y, color) { this.x = x; this.y = y; this.px = game.cellWidth * (this.x + 1) - game.cellWidth / 2; this.py = game.cellWidth * (this.y + 1) - game.cellWidth / 2; this.color = color; this.light = 10; }; Bubble.prototype.draw = function () { if (!this.color) { return; } var ctx = game.ctx; ctx.beginPath(); //console.log("x:" + px + "y:" + py); var gradient = ctx.createRadialGradient(this.px - 5, this.py - 5, 0, this.px, this.py, this.light); gradient.addColorStop(0, "white"); gradient.addColorStop(1, this.color); ctx.arc(this.px, this.py, 11, 0, Math.PI * 2); ctx.strokeStyle = this.color; ctx.fillStyle = gradient; ctx.fill(); ctx.stroke(); }; Bubble.prototype.play = function () { var me = this; var isUp = true; game.play("light_" + this.x + "" + this.y, function () { if (isUp) { me.light += 3; } if (!isUp) { me.light -= 3; } if (me.light >= 30) { isUp = false; } if (me.light <= 10) { isUp = true; } }, 50); }; Bubble.prototype.stop = function () { //this.light = 10; var me = this; game.stop("light" + this.x + "" + this.y); game.play("restore" + this.x + "" + this.y, function () { if (me.light > 10) { me.light--; } else { me.light = 10; game.stop("restore" + me.x + "_" + me.y); } }, 50); }; game.start(); </script> <div style="text-align:center;"> </div> <script src="http://www.mycodes.net/js/tongji.js"></script> <script src="http://www.mycodes.net/js/youxia.js" type="text/javascript">
这段代码实现了一个游戏中的泡泡射击功能,其中包括 Bubble 和 Cell 两个类。Bubble 类表示一个泡泡,包含位置和颜色等属性,还定义了绘制泡泡和播放动画的方法,如 draw() 和 play()。Cell 类表示游戏中的一个小格子,包含位置等属性。还有一些辅助方法,如 addBubble()、setBubble()、getBubble() 和 isEmpty(),用于操作和判断泡泡的状态。整个游戏的入口函数是 game.start(),在该函数中完成游戏的初始化和事件绑定等操作。
解释下面代码 game.ready = { startX: 41.5, startY: 21.5, width: game.cellWidth * 3, height: game.cellWidth, bubbles: [], init: function () { this.genrate(); var me = this; me.flyin(); }, genrate: function () { for (var i = 0; i < 3; i++) { var color = game.colors[game.getRandom(game.mode)]; this.bubbles.push(new Bubble(i, 0, color)); } //console.log(this.bubbles); }, draw: function () { var ctx = game.ctx; ctx.save(); ctx.translate(this.startX, this.startY); ctx.beginPath(); ctx.strokeStyle = "#555"; ctx.strokeRect(0, 0, this.width, this.height); ctx.stroke(); //绘制准备的泡 this.bubbles.forEach(function (bubble) { bubble.draw(); }); ctx.restore(); }, isMoving: false, flyin: function () { var emptys = game.map.getEmptyBubbles(); if (emptys.length < 3) { //GAME OVER game.over(); return; } var me = this; var status = [0, 0, 0]; var times = 1; game.play("flyin", function () { if (status[0] && status[1] && status[2]) { game.stop("flyin"); me.isMoving = false; status = [0, 0, 0]; me.bubbles = []; me.genrate(); return; } me.isMoving = true; for (var i = 0; i < me.bubbles.length; i++) { if (status[i]) { continue; } var target = emptys[i]; var x2 = target.px + game.map.startX - me.startX; var y2 = target.py + game.map.startY - me.startY; var current = me.bubbles[i]; var step = Math.abs(x2 - current.px)/10 || Math.abs(y2 - current.y)/10; if (current.px < x2) { current.py = ((y2 - current.py) / (x2 - current.px)) * step + current.py; current.px += step; if (current.px > x2) { current.px = x2; } } else if (current.px > x2) { current.py = ((y2 - current.py) / (current.px - x2)) * step + current.py; current.px -= step; if (current.px < x2) { current.px = x2; } } else { current.py += step; } if (current.py > y2) { current.py = y2; } if (parseInt(current.px+0.1) == x2 && parseInt(current.py+0.1) == y2) { status[i] = 1; current.x = target.x; current.y = target.y; game.map.addBubble(current); game.map.clearLine(current.x, current.y, current.color, false); } } }, 10); } };
这段代码定义了一个名为 `game.ready` 的对象,该对象包含了多个属性和方法,用于实现游戏中的准备状态。
具体来说,该对象的属性包括:`startX`、`startY`、`width`、`height`、`bubbles` 和 `isMoving`。其中,`startX` 和 `startY` 表示准备状态区域的左上角坐标,`width` 和 `height` 表示准备状态区域的宽度和高度,`bubbles` 是一个数组,用于存储准备状态下的气泡对象,`isMoving` 表示当前准备状态下的气泡是否在移动中。
该对象还包含了多个方法,其中比较重要的是 `init`、`genrate`、`draw` 和 `flyin`。
`init` 方法用于初始化准备状态,其中会调用 `genrate` 方法生成三个新的气泡,并调用 `flyin` 方法将气泡飞入游戏区域。
`genrate` 方法用于生成三个新的气泡,其中会根据当前游戏模式随机生成气泡的颜色,并将生成的气泡对象存储到 `bubbles` 数组中。
`draw` 方法用于绘制准备状态下的气泡,其中会遍历 `bubbles` 数组,调用每个气泡对象的 `draw` 方法进行绘制。
`flyin` 方法用于将准备状态下的气泡飞入游戏区域。该方法首先会调用 `game.map.getEmptyBubbles` 方法获取当前游戏区域中空闲的气泡位置,然后将准备状态下的气泡移动到这些位置。移动过程中,会根据气泡当前位置和目标位置之间的距离计算移动步长,并逐步将气泡移动到目标位置。当所有气泡都移动到目标位置时,该方法会调用 `game.map.addBubble` 方法将气泡添加到游戏区域,并调用 `game.map.clearLine` 方法清除与新气泡相连的珠子。如果游戏区域中没有足够的空闲气泡位置,则游戏结束。
阅读全文