- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 d3 版本 4 创建径向树。预期的 ui 应该是每个径向树节点应该看起来像 d4 的 donut chart ,它应该向我们显示一些百分比值,我添加了预期快照和当前开发快照。任何建议都会有所帮助,谢谢。
var data = {
"name": "AirtelApp",
"children": [
{
"name": "airteltopicsOne",
"children": [
{ "name": "airteltopicsOne1.1" },
{ "name": "airteltopicsOne1.2" },
]
},
{ "name": "airteltopicstwo",
"children": [
{ "name": "airteltopicstwo2.1" },
{ "name": "airteltopicstwo2.2" },
{ "name": "airteltopicstwo2.3" },
{ "name": "airteltopicstwo2.4" },
]
},
{
"name": "airteltopicsthree",
"children": [
{ "name": "airteltopicsthree3.1" },
{ "name": "airteltopicsthree3.2" }
]
},
{
"name": "airteltopicsfour",
"children": [
{ "name": "airteltopics4.1" },
{ "name": "airteltopicsfour4.2" }
]
},
]
};
//height width for chart
/* const width = 750,
height = 750,
radius = width / 2; */
var margin = {top: 20, right: 90, bottom: 30, left: 90},
width = 750,
height = 750,
radius = width / 2;
//const tree = d3.cluster().size([2 * Math.PI, radius - 100]);
var treemap = d3.cluster().size([2 * Math.PI, radius - 100]);
var nodes = d3
.hierarchy(data)
.sort((a, b) => d3.ascending(a.data.name, b.data.name))
console.log(nodes);
nodes = treemap(nodes);
var svg = d3.select("#chart").append("svg")
.attr('width', width)
.attr('height', height);
var g = svg.append("g")
.attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')');
console.log(svg);
var node =g
.selectAll('.node')
.data(nodes.descendants())
.join('circle')
.style("stroke", "red")
.attr(
'transform',
(d) => `
rotate(${(d.x * 180) / Math.PI - 90})
translate(${d.y},0)
`
)
.attr('fill', (d) => (d.children ? '#FFE7E9' : '#D6F8FF'))
.attr('r', 30.5);
var link = g.attr('fill', 'none')
.attr('stroke', '#555')
.attr('stroke-opacity', 0.1)
.attr('stroke-width', 2.5)
.selectAll('path')
.data(nodes.links())
.join('path')
.attr(
'd',
d3
.linkRadial()
.angle((d) => d.x)
.radius((d) => d.y)
);
var fonts = g
.attr('font-family', 'sans-serif')
.attr('font-size', 10)
.attr('stroke-linejoin', 'round')
.attr('stroke-width', 3)
.selectAll('text')
.data(nodes.descendants())
.join('text')
.attr(
'transform',
(d) => `
rotate(${(d.x * 180) / Math.PI - 90})
translate(${d.y},0)
rotate(${d.x >= Math.PI ? 180 : 0})
`
)
.attr('dy', '0.31em')
.attr('x', (d) => (d.x < Math.PI === !d.children ? 6 : -6))
.attr('text-anchor', (d) =>
d.x < Math.PI === !d.children ? 'start' : 'end'
)
.text((d) => d.data.name)
.clone(true)
.lower()
.attr('stroke', 'white');
.gr-bg {
fill: linen;
}
svg {
/* border: solid 1px #ccc; */
}
.link {
fill: none;
stroke: black;
stroke-width: 1.5px;
}
.node circle {
fill: #999;
}
.node text {
font: 10px sans-serif;
}
.node--internal text {
text-shadow: 0 1px 0 #fff, 0 -1px 0 #fff, 1px 0 0 #fff, -1px 0 0 #fff;
}
.link {
fill: none;
stroke: back;
stroke-opacity: 0.1;
stroke-width: 2.5px;
}
.hello {
width: 100%;
height: 400px;
}
.node:hover{
stroke-width: 7px !important;
opacity: 1 !important;
}
ul {
list-style: none;
/* margin: 5px 5px; */
}
li {
margin: 0px 0;
}
text {
font: 16px sans-serif;
fill: black;
transition: all 0.3s;
}
.label {
fill: #000;
}
.chart {
max-width: 600px;
max-height: 600px;
}
.chart-svg {
width: 100%;
height: 100%;
}
.node {
@for $i from 1 through 30 {
&:nth-child(#{$i}) .graph {
$delay: $i * 0.075s;
animation-delay: $delay;
}
}
}
.graph {
opacity: 0;
animation-name: animateIn;
animation-duration: 1s;
animation-fill-mode: forwards;
}
@keyframes animateIn {
0% {
opacity: 0;
transform: scale(0.6) rotate(-15deg);
}
100% {
opacity: 1;
transform: scale(1) rotate(0);
}
}
.node, .link {
cursor: pointer;
}
.overlay{
background-color:#EEE;
}
.node circle {
fill: #fff;
stroke: steelblue;
stroke-width: 4.5px;
}
.node text {
font-size:12px;
font-family:sans-serif;
}
.link {
fill: none;
stroke: black;
stroke-width: 4px;
}
<div id="chart" class="chart"></div>
最佳答案
最简单的方法是更换
.join('circle')
...
和
.join('g')
...
您仍然希望对 g 元素应用变换,就像对圆圈所做的那样,尽管我们可以删除应用于圆圈的其余样式属性。
g
具有为每个
g
放置 [0,0] 的变换的元素每个圆的中心在哪里。
selection.each(function(d) { // d being the node datum.
let g = d3.select(this) // our positioned g element.
let pie = d3.pie() // setup a pie layout
...
let arc = d3.arc() // setup an arc generator
...
g.selectAll(null)
.data(pie(d.data.pieData) // pass property containing pie data to pie layout generator.
.enter()
.append("path")
.attr("d", arc) // use arc generator
.attr("fill", function(segmentDatum) { /* logic using segment's datum */})
...
})
根据每个饼图的自定义程度,您可以从每个函数中删除 d3.pie 或 d3.arc 设置。以上假设每个节点的数据都包含饼图所需的数据(代表每个段的值/对象数组 - 您的示例数据没有这个),当然要制作 donut ,您需要设置圆弧的内半径值作为大于零的值。
关于javascript - 如何将 donut 的 svg 添加到每个节点以代替径向 TreeMap 中的圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69226820/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
有两个 SVG 元素( SVG1 和 SVG2 ),其中 SVG1 是一个包含各种元素的大区域,会不时添加、删除和重新定位。另一方面,SVG2 需要用作 图标化表示(小) SVG1 的版本,非常小,但
我知道我们可以使用 document.createElementNS("http://www.w3.org/2000/svg","line"); 创建一个嵌入到html页面。 但是,这种方法似乎不适用
我正在尝试使用 Flutter SVG 依赖项,我将 svg 放入 Assets 中,在 pubspec.yaml 中设置,并在我的小部件中设置,但是,使用黑色容器加载 svg 我已经尝试过更改 sv
为什么这样的演示:http://jsbin.com/ejorus/2/edit,将元素嵌套在另一个元素内? JS
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试在 SVG 中做一些非常简单的事情: 将整个视口(viewport)分成两个矩形 每个矩形的宽度应为视口(viewport)宽度的 50% 每个矩形的高度应为视口(viewport)高度的
我试图将 play svg 居中放置在 SVG 圆圈的中间,但似乎不知道该怎么做。 垂直和水平。 https://jsfiddle.net/c0qshm0t/17/ 最
是否可以使用一个 SVG 形状作为另一个形状的填充? 最佳答案 您想使用 SVG Pattern .见 this example : 注意
我在 SVG 中有一个非常简单的路径。 (预览:https://i.imgur.com/nVnxcRg.png) 我想要
我可以通过以下方式创建多边形: #!/usr/bin/env python from shapely.geometry import Polygon area = Polygon(((52, 13),
我使用 require 的 SVG 没有显示。 在我的终端中,svg Assets 被发出并且路径在我的 html 中正确设置。 但是,SVG 不会显示,而其他格式(如 jpg 或 png)可以显示
我在 SVG 混合模式中遇到了问题。我在 SVG 中有四个路径,我想用公式组合它们:(1*2) + (3*4),即路径 1 和路径 2 应该使用乘法模式混合,类似地路径 3 和路径 4 应该使用混合相
我无法超过 2 个级别。 (在 Iceweasel 和 Chromium 上尝试过。) 作为测试,我尝试了 this earlier reply 中提供的代码的变体。 .这个由 3 个单独的文件组成,
请引用以下组中的clip-path 组 ID -> “container_svg_symbolGroup1_0(即圆圈符号)在我删除图表中可见的剪辑路径时不可见。 问题是什么?为什么
使用联合 js 在 svg 中创建了一个文本区域。但是,我无法在文本区域中输入任何文本。如何使文本区域可编辑? 代码: var graph = new joint.dia.Graph;
您可以不受限制地停止和重复动画,但如果您重新启动一个不确定的动画,它将失去其累积值并从初始值开始。 也许我应该用一个例子来澄清;拿这个动画: 如果我停止此动画,并开始影响同一对象旋转的不同动画(
如果我在浏览器中显示常规 SVG(作为独立文件或嵌入在 HTML 中),在拥有大量单独的路径元素和一个巨大的路径元素之间在效率上是否有任何理论上的差异? 我正在考虑将某种动画从一张图片变成一张完全不同
logo的turtlegraphics的svg路径中是否有等价物? 而不是硬编码的 x 和 y 坐标,这也迫使我在移动更相对的“增量”方法时调整控制点。 我的解决方案应该适用于 FOCS(Firefo
目前正在使用 SVG 元素与一堆 元素将使它具有一种逐渐变细的边缘。我尝试了很多不同的 CSS 样式来解决这个问题,但没有任何效果。这是一个带有针迹的圆圈的代码:
我是一名优秀的程序员,十分优秀!