Javascript 如何使用Json Daives';D3字云
我在R中使用Json Daives的D3单词云。我已经生成了单词云,但我面临的问题是单词云的形状不是圆形的。我正在查看d3.layout.cloud.js文件,试图修改代码以实现这一点,但没有成功。该文件有一个名为“place”的函数,用于定义云的形状。但我不知道如何修改此函数以实现圆形。还有其他人尝试过实现这种循环表示吗?我正在粘贴下面位置函数的代码Javascript 如何使用Json Daives';D3字云,javascript,r,d3.js,shiny,word-cloud,Javascript,R,D3.js,Shiny,Word Cloud,我在R中使用Json Daives的D3单词云。我已经生成了单词云,但我面临的问题是单词云的形状不是圆形的。我正在查看d3.layout.cloud.js文件,试图修改代码以实现这一点,但没有成功。该文件有一个名为“place”的函数,用于定义云的形状。但我不知道如何修改此函数以实现圆形。还有其他人尝试过实现这种循环表示吗?我正在粘贴下面位置函数的代码 function place(board, tag, bounds) { var perimeter = [{x: 0, y: 0}, {x
function place(board, tag, bounds) {
var perimeter = [{x: 0, y: 0}, {x: size[0], y: size[1]}],
startX = tag.x,
startY = tag.y,
maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),
s = spiral(size),
dt = Math.random() < .5 ? 1 : -1,
t = -dt,
dxdy,
dx,
dy;
while (dxdy = s(t += dt)) {
dx = ~~dxdy[0];
dy = ~~dxdy[1];
if (Math.min(dx, dy) > maxDelta) break;
tag.x = startX + dx;
tag.y = startY + dy;
if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||
tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;
// TODO only check for collisions within current bounds.
if (!bounds || !cloudCollide(tag, board, size[0])) {
if (!bounds || collideRects(tag, bounds)) {
var sprite = tag.sprite,
w = tag.width >> 5,
sw = size[0] >> 5,
lx = tag.x - (w << 4),
sx = lx & 0x7f,
msx = 32 - sx,
h = tag.y1 - tag.y0,
x = (tag.y + tag.y0) * sw + (lx >> 5),
last;
for (var j = 0; j < h; j++) {
last = 0;
for (var i = 0; i <= w; i++) {
board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);
}
x += sw;
}
delete tag.sprite;
return true;
}
}
}
return false;
}
功能位置(板、标签、边界){
变量周长=[{x:0,y:0},{x:size[0],y:size[1]}],
startX=tag.x,
startY=tag.y,
maxDelta=Math.sqrt(大小[0]*大小[0]+大小[1]*大小[1]),
s=螺旋线(尺寸),
dt=数学随机数()<.5?1:-1,
t=-dt,
dxdy,
dx,
dy;
而(dxdy=s(t+=dt)){
dx=~~dxdy[0];
dy=~~dxdy[1];
如果(数学最小值(dx,dy)>最大增量)中断;
tag.x=startX+dx;
tag.y=星状+dy;
如果(tag.x+tag.x0<0 | | tag.y+tag.y0<0||
tag.x+tag.x1>大小[0]| | tag.y+tag.y1>大小[1])继续;
//TODO仅检查当前边界内的冲突。
如果(!bounds | |!cloudCollide(标记、板、大小[0])){
如果(!bounds | | collide rects(标记,边界)){
var sprite=tag.sprite,
w=标签宽度>>5,
sw=尺寸[0]>>5,
lx=标签x-(w>5),
最后;
对于(var j=0;jsx:0);
}
x+=sw;
}
删除tag.sprite;
返回true;
}
}
}
返回false;
}
查看此项