小编Ale*_*ail的帖子

如何在 d3.zoom (d3v4/v5) 中捕获捏合和拉伸手势事件

背景

我正在将多种交互构建到我的 d3v5 可视化中。单击并拖动应该让用户平移 svg 容器。滚轮应垂直平移。这两个都有效。

svg.call(d3.zoom().on("zoom", zoomed)).on("wheel.zoom", wheeled);

function zoomed() {
    current_transform = d3.zoomTransform(g);
    current_transform.x += d3.event.sourceEvent.movementX;
    current_transform.y += d3.event.sourceEvent.movementY;
    g.attr("transform", current_transform);
}

function wheeled() {
    current_transform = d3.zoomTransform(g);
    current_transform.y = current_transform.y - d3.event.deltaY;
    g.attr("transform", current_transform);
}
Run Code Online (Sandbox Code Playgroud)

问题

我想允许用户使用捏合和拉伸触摸手势来缩放经典意义上的 svg。"wheel.zoom"触摸手势的 is 类似于什么?如何在用户在触控板或手机上捏合和拉伸时注册回调?

笔记

更新

看起来可能是捏合手势被捏合和拉伸捕获的"wheel.zoom"情况d3.event.type == "wheel"。此外,d3.event.deltaZ == 0对于所有这些事件。

javascript d3.js

4
推荐指数
1
解决办法
2677
查看次数

如何写d3正负对数刻度

我有积极和消极的价值观,我想以"对数"的比例绘制它们.

想象一个具有均匀间隔的刻度的刻度,用于以下值:

-1000, -100, -10, -1, 0, 1, 10, 100, 1000
Run Code Online (Sandbox Code Playgroud)

我希望0在那里,它被定义为-Inf对数,使这进一步复杂化.

但是,我不认为这个要求是不合理的.这似乎是一个合理的规模,任何数据科学家可能想要绘制强烈不同的价值观.

你如何在d3中创建这样的比例和轴?

思考

d3.scaleLog()如果你使用像这样的技术,可以用2 秒或3个刻度巧妙地做到这一点.

我希望有可能是在一个合适的这样的一个简单的方法d3.scalePow().exponent(0.1),但除非我有混了我的日志规则,你不能让一个.scaleLog()出来的.scalePow()(尽管你可能接近它好一些的范围).

javascript d3.js

3
推荐指数
1
解决办法
587
查看次数

如何完全删除 d3 forceSimulation 及其拖动处理程序

我希望允许用户使用d3 forceSimulationCoLa 布局查看他们的网络,这意味着当用户触发事件时,我需要更改哪些布局算法正在更新我的节点和边的属性xy

特别是,这要求我能够停止模拟并防止它们在其他属性处于“活动”状态时更新我提供给它们的数据上的这些属性,以及删除与它们关联的拖动处理程序。

我的渲染函数目前有:

if (use_cola) {

  // MUST TURN OFF D3 AND ITS DRAG HANDLERS!

  force = cola_force.nodes(graph.nodes)
    .links(links)
    .groups(groups[group_nodes_by])
    .jaccardLinkLengths(repulsion_strength, 0.7)
    .avoidOverlaps(true)
    .start(50, 0, 50);

  node.call(cola_force.drag);
  group.call(cola_force.drag);

  cola_force.on('tick', ticked);

} else {  // d3

  // MUST TURN OFF COLA AND ITS DRAG HANDLERS!

  force = d3_force.nodes(graph.nodes)
    .force("link", d3.forceLink(links))
    .force("charge", d3.forceManyBody().strength(-repulsion_strength))
    .force("center", d3.forceCenter(w / 2, h / 2));

  node.call(d3.drag()
    .on("start", dragstarted)
    .on("drag", dragged)
    .on("end", dragended));  // where those are the conventional …
Run Code Online (Sandbox Code Playgroud)

javascript d3.js webcola

3
推荐指数
1
解决办法
1892
查看次数

如何在Sypi上放置Swig / Pybind11 C ++项目

我有代码包裹着两个pybind11痛饮,但似乎无法找到如何正确获取PyPI上的代码,所以我可以文档pip install我的包。

Pybind11 似乎有一些问题,使得很难在pypi上放置代码

我想我要的是建立Linux和OSX二轮,但我不能找到有关这个多文档。我猜有人通过travis和脚本执行此操作吗?有一种即插即用的方式来制造所有发行版的轮子吗?

python swig pypi pybind11

2
推荐指数
1
解决办法
959
查看次数

熊猫按位置覆盖列名称

我正在阅读一个csv,并且我想覆盖前两列的名称。

  • 我不能使用,df.rename(columns={0:'name 1', 1:'name 2'})因为这些列没有被称为0和1。它们有名称,我只想把它们扔掉。

  • 这好像是

    df.columns.values[0] = 'name 1'
    df.columns.values[1] = 'name 2'
    
    Run Code Online (Sandbox Code Playgroud)

    有严重的问题,因为事后df['name 1']给我一个KeyError。

  • 理想的是pd.read_csv(file, names=['name 1', 'name 2', ...]。奇怪的是,这将col 3重命名为“ Ellipsis”,但效果不理想。

关于如何合理地在熊猫中做到这一点的任何想法?

python dataframe pandas

2
推荐指数
1
解决办法
1087
查看次数

一段时间后隐藏在 jupyterlab 中的 svg 数字

我最近发现我可以在我的 jupyterlab 笔记本中默认使用 SVG 制作我所有的 matplotlib 图形

import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_formats = ['svg']
Run Code Online (Sandbox Code Playgroud)

但是,如果我刷新页面,数字就会消失,留下

<Figure size 864x576 with 1 Axes>
Run Code Online (Sandbox Code Playgroud)

如果不更改内联后端,则不会发生这种效果。刷新后,我的情节数字也仍然出现。我宁愿不必重新运行单元格。查看实际的 ipynb 文件,SVG 就在实际文件中。如何在不重新运行单元格的情况下显示此数字?

python jupyter jupyter-lab

2
推荐指数
1
解决办法
41
查看次数

d3 mousedown 事件触发,但 mouseup 事件不触发

我在 d3 中看到一些奇怪的行为。我以通常的方式有一个力定向图

node = svg.selectAll(".node").data(graph.nodes).enter().append("circle")....
Run Code Online (Sandbox Code Playgroud)

当有人单击节点时,我想要一个简单的动画(而不是 console.log)

function set_focus(d) { console.log('set'); }
function remove_focus() { console.log('remove'); }

node.on("mousedown", set_focus);
node.on("mouseup", remove_focus);
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我将鼠标放在节点上时, set 事件会触发,但当我释放鼠标时,remove_focus不会触发。有人知道发生了什么事吗?


d3v5、Chrome 65、macOS 10.13

d3.js

1
推荐指数
1
解决办法
1878
查看次数

python groupby 使用比较器函数/lambda 而不是关键函数

我有一个整数列表

l = [17811, 17831, 17843, 28996, 37606, 44325, 44365, 44387]
Run Code Online (Sandbox Code Playgroud)

我想返回彼此之间一定距离内的组,例如 30:

[[17811, 17831, 17843], [28996], [37606], [44325], [44365, 44387]]
Run Code Online (Sandbox Code Playgroud)

我想要一个允许我传递比较器的函数:

magic.groupby(l, lambda(a,b): abs(a-b) < 30)
Run Code Online (Sandbox Code Playgroud)

存在这样简单的表达方式吗?

python

0
推荐指数
1
解决办法
182
查看次数

标签 统计

d3.js ×4

python ×4

javascript ×3

dataframe ×1

jupyter ×1

jupyter-lab ×1

pandas ×1

pybind11 ×1

pypi ×1

swig ×1

webcola ×1