我正在将多种交互构建到我的 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 类似于什么?如何在用户在触控板或手机上捏合和拉伸时注册回调?
据推测,可能是这些 touchstart、touchmove、touchend 事件。但
svg.call(d3.zoom().on("zoom", zoomed)).on("wheel.zoom", wheeled).on("touchstart.zoom", () => console.log('here'));
Run Code Online (Sandbox Code Playgroud)
当我捏和拉伸时从不记录。
我在 d3v3 中看到过这个块可以实现这一点。
看起来可能是捏合手势被捏合和拉伸捕获的"wheel.zoom"情况d3.event.type == "wheel"。此外,d3.event.deltaZ == 0对于所有这些事件。
题
我有积极和消极的价值观,我想以"对数"的比例绘制它们.
想象一个具有均匀间隔的刻度的刻度,用于以下值:
-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()(尽管你可能接近它好一些的范围).
我希望允许用户使用d3 forceSimulation或CoLa 布局查看他们的网络,这意味着当用户触发事件时,我需要更改哪些布局算法正在更新我的节点和边的属性x。y
特别是,这要求我能够停止模拟并防止它们在其他属性处于“活动”状态时更新我提供给它们的数据上的这些属性,以及删除与它们关联的拖动处理程序。
我的渲染函数目前有:
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) 我有代码包裹着两个pybind11和痛饮,但似乎无法找到如何正确获取PyPI上的代码,所以我可以文档pip install我的包。
Pybind11 似乎有一些问题,使得很难在pypi上放置代码。
我想我要的是建立Linux和OSX二轮,但我不能找到有关这个多文档。我猜有人通过travis和脚本执行此操作吗?有一种即插即用的方式来制造所有发行版的轮子吗?
我正在阅读一个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”,但效果不理想。
关于如何合理地在熊猫中做到这一点的任何想法?
我最近发现我可以在我的 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 就在实际文件中。如何在不重新运行单元格的情况下显示此数字?
我在 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
我有一个整数列表
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)
存在这样简单的表达方式吗?