- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:是否可以将 d3.force 导入到我的 React 组件中?如果没有,那么我可能会无缘无故地为此苦苦挣扎。
从谷歌搜索问题(如何将标签添加到散点图而不重叠),答案似乎是 d3.force(至少这是答案之一),这是我想尝试的答案绕过我的头。
我创建了一个非常小的简单示例,其中包含约 15 个圆圈及其相应的文本标签,这些标签当前位于标记右侧 6 像素和标记下方 3 像素处。结果是重叠标签名称的困惑图表。
const myData = [
{x:25, y:30, name:"tommy"},
{x:8, y:12, name:"joey"},
{x:92, y:107, name:"nicky"},
{x:85, y:50, name:"peter"},
{x:65, y:80, name:"mickie"},
{x:65, y:80, name:"gregie"},
{x:54, y:6, name:"tammie"},
{x:102, y:42, name:"benny"},
{x:66, y:45, name:"dennie"},
{x:81, y:44, name:"jerryi"},
{x:127, y:36, name:"garrie"},
{x:62, y:30, name:"frankie"},
{x:157, y:55, name:"joeiyei"},
{x:157, y:62, name:"nickaie"},
{x:58, y:105, name:"tommie"}
]
d3.select('#mySvg')
.selectAll('circle')
.data(myData)
.enter()
.append('circle')
.attr('cx', d => d.x)
.attr('cy', d => d.y)
.attr('r', 6)
.attr('fill', 'blue')
d3.select('#mySvg')
.selectAll('text')
.data(myData)
.enter()
.append('text')
.attr('x', d => d.x + 6)
.attr('y', d => d.y + 3)
.attr('font-size', '0.8em')
.text(d => d.name)
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg id="mySvg">
我正在努力寻找从哪里开始使用 d3.force 文档。我应该将整个图转换为力图吗?我不介意有些点重叠,在我的数据中(在这个例子中),有些点具有完全相同的 x,y 坐标。
另外,是否可以在标签和点之间有一条浅灰色的线连接,这样就不会混淆哪个标签对应哪个点?
如果之前有人问过这个问题,我深表歉意。在我努力寻找这个问题的答案时,我发现了一些完全是力图的图(我认为我不想要)。在此感谢任何帮助!!!
最佳答案
首先,不要把整张图都变成力导向图。鉴于我在您的代码中看到的内容,点的精确垂直和水平位置编码了一个信息,必须准确地传输给用户。根据其定义,力导向图将无法保证这种精度。
您可以使用力模拟来避免标签的碰撞,也就是说,只对文本而不是点应用模拟。这并不难做到,但即便如此,我还是建议不要这样做。这里的原因很简单:你有文本标签,而不是像圆圈这样的图形元素。那些文字不能自由旋转,也不应该旋转(这样会增加阅读难度)。
因此,考虑到文本应该水平呈现,在这种情况下我最喜欢的方法是使用 text-anchor
。结合最大程度地扩大散射以充分利用可用区域(此处我使用的是简单的线性比例尺),该方法非常有效。而且非常简单:
首先,我们创建一个名称数组,显示在点的左侧:
const namesToLeft = ["dennie", "gregie"];
然后,我们更改text-anchor
:
.attr("text-anchor", function(d) {
return namesToLeft.indexOf(d.name) > -1 ? "end" : "start"
})
这是演示:
const myData = [{
x: 25,
y: 30,
name: "tommy"
},
{
x: 8,
y: 12,
name: "joey"
},
{
x: 92,
y: 107,
name: "nicky"
},
{
x: 85,
y: 50,
name: "peter"
},
{
x: 65,
y: 80,
name: "mickie"
},
{
x: 65,
y: 80,
name: "gregie"
},
{
x: 54,
y: 6,
name: "tammie"
},
{
x: 102,
y: 42,
name: "benny"
},
{
x: 66,
y: 45,
name: "dennie"
},
{
x: 81,
y: 44,
name: "jerryi"
},
{
x: 127,
y: 36,
name: "garrie"
},
{
x: 62,
y: 30,
name: "frankie"
},
{
x: 157,
y: 55,
name: "joeiyei"
},
{
x: 157,
y: 62,
name: "nickaie"
},
{
x: 58,
y: 105,
name: "tommie"
}
];
var scale = d3.scaleLinear()
.domain([0, 160])
.range([0, 300]);
const namesToLeft = ["dennie", "gregie"];
d3.select('#mySvg')
.selectAll('circle')
.data(myData)
.enter()
.append('circle')
.attr('cx', d => scale(d.x))
.attr('cy', d => scale(d.y))
.attr('r', 6)
.attr('fill', 'blue')
d3.select('#mySvg')
.selectAll('text')
.data(myData)
.enter()
.append('text')
.attr("text-anchor", function(d) {
return namesToLeft.indexOf(d.name) > -1 ? "end" : "start"
})
.attr('x', d => scale(d.x) + (namesToLeft.indexOf(d.name) > -1 ? -6 : 6))
.attr('y', d => scale(d.y) + 3)
.attr('font-size', '0.8em')
.text(d => d.name)
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg id="mySvg" width="400" height="300">
关于javascript - 如何使用 d3.force 对散点图进行动态、非重叠标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50850384/
在 JavaScript 中,我们可以动态创建 元素并附加到 部分,以便为大量元素应用 CSS 规则。 这种方法的优点或缺点是什么? 如果它确实提供了与元素上的 javascript 迭代相比的性
我有这个代码 import "./HTTPMethod.dart"; import '../../DataModel/DataModel.dart'; mixin RouterMixin { HT
哪些 OLAP 工具支持动态、动态地创建维度或层次结构? 例如,层次结构将成员定义为:“前 5 名”、“前 6-10 名”、“其他”... 计算成员是通常的答案,我正在寻找不同的东西。计算器的问题。成
我正在 CakePHP 中创建一个“表单编辑器”。 该界面允许用户选择要应用于字段的验证,例如数字、电子邮件等 因此,我需要根据用户输入为模型动态创建验证。为此,我可以使用验证对象:https://b
这是一个场景: 我有一个Web服务,我们将其称为部署在tomcat(轴)上的StockQuoteService。通过此 Web 服务公开了 getStockQuote() 方法。 现在,我想构建一个
我正在尝试从服务器获取 JSON 响应并将其输出到控制台。 Future login() async { var response = await http.get( Uri.
我从另一个问题中得到了这段代码(感谢 chunhunghan)。我需要创建一个登录屏幕,并尝试根据服务器发回给我的响应来验证用户凭据,但是每次我尝试运行代码时,它都会给我“未处理的异常:Interna
当我在“Dart”主程序中运行它时,一切正常,并且我得到了一个与会者列表。但是,当我在我的 Flutter 应用程序中调用它时,出现错误: flutter:“List”类型不是“List>”类型的子类
本文实例为大家分享了js实现验证码动态干扰的具体代码,供大家参考,具体内容如下 效果一 效果二 代码一 ?
目前我正在为我的网站使用 No-Ip,我想使用 cloudflare 来抵御 ddos 和机器人程序。我注意到您需要一个用于 cloudflare 的域。我还搜索了网络,发现了一个叫做 cloud
有没有办法在 Excel VBA 中构建动态 if 语句?基本上我正在尝试创建一个参数化计算,用户将能够输入不同的变量,即 变量 1 “变量 2” “变量 3” 在这种情况下 变量 1 是单元格引用
大家好, 请查看上面的图片,我有两张 table 。在下面代码的第一个表中,我得到了这种格式。 但我想像 Table2 那样格式化,每个合并单元格中的行数是动态的,而且不一样。 有没有办法像table
如何根据我添加的 View 修改标题部分的高度?heightForHeaderInSection在 viewForHeaderInSection 之前被调用我不知道 View 大小,直到我创建它。 最
是否存在在运行时生成 AST/解析树的解析器?有点像一个库,它会接受一串 EBNF 语法或类似的东西并吐出数据结构? 我知道 antlr、jlex 和他们的同类。他们生成可以做到这一点的源代码。 (喜
我在持有汽车制造商的表格上有一个 MultipleChoiceField。我想将我的汽车数据库过滤到已检查的品牌,但这会导致问题。如何动态获取所有 Q(make=...) 语句? 我如何开始:['va
$end = preg_replace($pattern, $replacement, $str); 如何使替换字符串 $replacement 随 $str 中的每次匹配而变化?例如,我想用关联的图
我正在编写一个 VBA 程序,用于过滤表中的值。我试图使其成为一个适用于您提供的所有表格的通用程序。在我的程序中,我必须设置它正在过滤的表的范围:Set rng = dataSheet.Range("
我正在循环一个元素数组,并且我想使用给定的模板递归地显示该元素 然后在该模板内使用带有切换功能的按钮来显示/隐藏给定元素的Child的更深级别模板(Child也是一个元素) 这是我的模板
从客户端(html)发送表单,服务器端通过选择选项之一决定运行哪个函数。 const decideWho = (form) => { const choice = form.choice; c
我有一个具有以下属性的按钮: circle_normal.xml(在 res/drawable 中) circle.xml(在 res/drawable 中)
我是一名优秀的程序员,十分优秀!