- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 d3 脚本,其中包含以下格式的数据:
var data = [{name: "A", rank: 0, student_percentile: 100.0,
admit_probability: 24},
{name: "B", rank: 45, student_percentile: 40.3,
admit_probability: 24},
{name: "C", rank: 89, student_percentile: 89.7,
admit_probability: 24},
{name: "D", rank: 23, student_percentile: 10.9,
admit_probability: 24},
{name: "E", rank: 56, student_percentile: 30.3,
admit_probability: 24}];
最初当页面加载时,我用这些数据制作了一个气泡图。之后,用户可以输入(从 A 到 E)。图表的x 轴
由_student_percentile_ 和rank 的y 轴
组成。用户输入进来后,我想用这个名字突出显示气泡(我有用户输入的 rank 和 _student_percentile_)
现在,我不明白,如何使用 cx=xscale
(student_percentile)、cy=yscale
(rank)、student_percentile 和 rank 来过滤圆从输入中接收。
我的脚本如下:
var svg;
var margin = 40,
width = 600,
height = 400;
xscale = d3.scaleLinear()
.domain(
d3.extent(data, function(d) { return +d.student_percentile; })
)
.nice()
.range([0, width]);
yscale = d3.scaleLinear()
.domain(d3.extent(data, function(d) { return +d.rank; }))
.nice()
.range([height, 0]);
var xAxis = d3.axisBottom().scale(xscale);
var yAxis = d3.axisLeft().scale(yscale);
svg = d3.select('.chart')
.classed("svg-container", true)
.append('svg')
.attr('class', 'chart')
.attr("viewBox", "0 0 680 490")
.attr("preserveAspectRatio", "xMinYMin meet")
.classed("svg-content-responsive", true)
.append("g")
.attr("transform", "translate(" + margin + "," + margin + ")");
svg.append("g")
.attr("class", "y axis")
.call(yAxis);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// var legend = svg.append("g")
// .attr('class', 'legend')
var color = d3.scaleOrdinal(d3.schemeCategory10);
var local = d3.local();
circles = svg.selectAll(null)
.data(data)
.enter()
.append("circle")
.attr("cx", width / 2)
.attr("cy", height / 2)
.attr("opacity", 0.3)
.attr("r", 20)
.style("fill", function(d){
if(+d.admit_probability <= 40){
return "red";
}
else if(+d.admit_probability > 40 && +d.admit_probability <= 70){
return "yellow";
}
else{
return "green";
}
})
.attr("cx", function(d) {
return xscale(+d.student_percentile);
})
.attr("cy", function(d) {
return yscale(+d.rank);
})
.on('mouseover', function(d, i) {
local.set(this, d3.select(this).style("fill"));
d3.select(this)
.transition()
.duration(1000)
.ease(d3.easeBounce)
.attr("r", 32)
.style("fill", "orange")
.style("cursor", "pointer")
.attr("text-anchor", "middle");
}
)
.on('mouseout', function(d, i) {
d3.select(this).style("fill", local.get(this));
d3.select(this).transition()
.style("opacity", 0.3)
.attr("r", 20)
.style("cursor", "default")
.transition()
.duration(1000)
.ease(d3.easeBounce)
});
texts = svg.selectAll(null)
.data(data)
.enter()
.append('text')
.attr("x", function(d) {
return xscale(+d.student_percentile);
})
.attr("text-anchor", "middle")
.attr("y", function(d) {
return yscale(+d.rank);
})
.text(function(d) {
return +d.admit_probability;
})
.attr("pointer-events", "none")
.attr("font-family", "sans-serif")
.attr("font-size", "12px")
.attr("fill", "red");
svg.append("text")
.attr("transform", "translate(" + (width / 2) + " ," + (height + margin) + ")")
.style("text-anchor", "middle")
.text("Percentile");
svg.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 0 - margin)
.attr("x",0 - (height / 2))
.attr("dy", "1em")
.style("text-anchor", "middle")
.text("Rank");
提前致谢!
最佳答案
您可以处理 keyup
输入事件并使用原生 d3.filter
过滤您的 circle
选择方法。查看下面隐藏代码段中的工作示例。
d3.select('#user-input').on('keyup', function() {
var value = d3.event.target.value;
circles.filter(function(circle) {
return circle.name === value.trim().toUpperCase();
})
.each(function() {
local.set(this, d3.select(this).style("fill"));
})
.transition()
.duration(1000)
.ease(d3.easeBounce)
.attr("r", 32)
.style("fill", "orange")
.style("cursor", "pointer")
.attr("text-anchor", "middle");
circles.filter(function(circle) {
return circle.name !== value.trim().toUpperCase();
})
.transition()
.attr("r", 20)
.style("cursor", "default")
.style("fill", function() { return local.get(this) || d3.select(this).style("fill"); })
.transition()
.duration(1000)
.ease(d3.easeBounce)
});
var svg;
var margin = 40,
width = 600,
height = 400;
var data = [{
name: "A",
rank: 0,
student_percentile: 100.0,
admit_probability: 24
}, {
name: "B",
rank: 45,
student_percentile: 40.3,
admit_probability: 24
}, {
name: "C",
rank: 89,
student_percentile: 89.7,
admit_probability: 24
}, {
name: "D",
rank: 23,
student_percentile: 10.9,
admit_probability: 24
}, {
name: "E",
rank: 56,
student_percentile: 30.3,
admit_probability: 24
}];
xscale = d3.scaleLinear()
.domain(
d3.extent(data, function(d) {
return +d.student_percentile;
})
)
.nice()
.range([0, width]);
yscale = d3.scaleLinear()
.domain(d3.extent(data, function(d) {
return +d.rank;
}))
.nice()
.range([height, 0]);
var xAxis = d3.axisBottom().scale(xscale);
var yAxis = d3.axisLeft().scale(yscale);
svg = d3.select('.chart')
.classed("svg-container", true)
.append('svg')
.attr('class', 'chart')
.attr("viewBox", "0 0 680 490")
.attr("preserveAspectRatio", "xMinYMin meet")
.classed("svg-content-responsive", true)
.append("g")
.attr("transform", "translate(" + margin + "," + margin + ")");
svg.append("g")
.attr("class", "y axis")
.call(yAxis);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// var legend = svg.append("g")
// .attr('class', 'legend')
var color = d3.scaleOrdinal(d3.schemeCategory10);
var local = d3.local();
circles = svg.selectAll(null)
.data(data)
.enter()
.append("circle")
.attr("cx", width / 2)
.attr("cy", height / 2)
.attr("opacity", 0.3)
.attr("r", 20)
.style("fill", function(d) {
if (+d.admit_probability <= 40) {
return "red";
} else if (+d.admit_probability > 40 && +d.admit_probability <= 70) {
return "yellow";
} else {
return "green";
}
})
.attr("cx", function(d) {
return xscale(+d.student_percentile);
})
.attr("cy", function(d) {
return yscale(+d.rank);
})
.on('mouseover', function(d, i) {
local.set(this, d3.select(this).style("fill"));
d3.select(this)
.transition()
.duration(1000)
.ease(d3.easeBounce)
.attr("r", 32)
.style("fill", "orange")
.style("cursor", "pointer")
.attr("text-anchor", "middle");
})
.on('mouseout', function(d, i) {
d3.select(this).transition()
.style("opacity", 0.3)
.style("fill", local.get(this))
.attr("r", 20)
.style("cursor", "default")
.transition()
.duration(1000)
.ease(d3.easeBounce)
});
texts = svg.selectAll(null)
.data(data)
.enter()
.append('text')
.attr("x", function(d) {
return xscale(+d.student_percentile);
})
.attr("text-anchor", "middle")
.attr("y", function(d) {
return yscale(+d.rank);
})
.text(function(d) {
return +d.admit_probability;
})
.attr("pointer-events", "none")
.attr("font-family", "sans-serif")
.attr("font-size", "12px")
.attr("fill", "red");
svg.append("text")
.attr("transform", "translate(" + (width / 2) + " ," + (height + margin) + ")")
.style("text-anchor", "middle")
.text("Percentile");
svg.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 0 - margin)
.attr("x", 0 - (height / 2))
.attr("dy", "1em")
.style("text-anchor", "middle")
.text("Rank");
d3.select('#user-input').on('keyup', function() {
var value = d3.event.target.value;
circles.filter(function(circle) {
return circle.name === value.trim().toUpperCase();
})
.each(function() {
local.set(this, d3.select(this).style("fill"));
})
.transition()
.duration(1000)
.ease(d3.easeBounce)
.attr("r", 32)
.style("fill", "orange")
.style("cursor", "pointer")
.attr("text-anchor", "middle");
circles.filter(function(circle) {
return circle.name !== value.trim().toUpperCase();
})
.transition()
.attr("r", 20)
.style("cursor", "default")
.style("fill", function() { return local.get(this) || d3.select(this).style("fill") })
.transition()
.duration(1000)
.ease(d3.easeBounce)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.11.0/d3.min.js"></script>
<div class="chart"></div>
<h2>Type "A", "B", "C", "D", or "E" in input below</h2>
<input type="text" id="user-input">
关于javascript - d3js : Hightlight bubble with specific parameters coming from input in bubble chart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47010213/
我正在使用带有气泡的 D3 和 DataMaps。我想在有人点击气泡时添加自定义操作。这些操作需要传递气泡的属性,例如气泡的名称。 如何将气泡的名称传递到该气泡的点击事件中? map.svg.sele
我有一个 d3 脚本,其中包含以下格式的数据: var data = [{name: "A", rank: 0, student_percentile: 100.0, adm
冒泡排序基本介绍 冒泡排序(Bubble Sorting)的基本思想是通过对待排序序列从前向后(从下表较小的元素开始),以此比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前向后部,就像水底下
冒泡排序基本介绍 冒泡排序(Bubble Sorting)的基本思想是通过对待排序序列从前向后(从下表较小的元素开始),以此比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前向后部,就像水底下
我没有阅读太多关于它的内容,但是下面链接中的作者建议我不要使用“冒泡”来集中 VBA 中的错误处理。 Excel Programming Weekend Crash Course via Google
这是我的冒泡排序代码,但我很困惑为什么输出仅显示 125。 int secondArray[] = {0, 1, 5, 2}; int num; for (int i = 1; i secondAr
我不确定这是一个传播问题还是一个设计缺陷,我读到过传播问题都是泡沫,但它就在这里。我有一个表格编辑网格。 每个单元格包含两个主要 block :编辑 div(包含用于编辑显示值的表单)和查看 div(
这个问题在这里已经有了答案: jquery stop child triggering parent event (7 个答案) 关闭 8 年前。 我不确定这是否真的冒泡,我会解释。 我有这个:
我想知道是否可以在 Swing 中制作类似于 StackOverflow 上的标签输入系统的东西(可能使用 JTextField)。 最佳答案 您可以重新定义自己的类来扩展 JTextField 类并
public static void sortByNumber(Course[] list) { Course temp = new Course(); boolean fixed =
在我的事件处理函数中,我需要检查某些字段是否是唯一的。为了实现这一点,我在后端使用 ajax 调用函数。 使用回调从该函数发回数据。此时我有事件处理程序: self.searchKeyboardCmd
我想设置 OKFN 制作的泡泡树。 https://github.com/okfn/bubbletree/wiki/Bubble-Tree-Documentation 现在我想在这里输入一些数据。我想
我想创建气泡,就像 iPhone 上的邮件应用程序一样。但是大量气泡(> 10)会大大减慢 View 的滚动速度。 关于我的实现的几句话:我创建自定义 View 并在其上添加“气泡”。以下是我创建每个
我目前正在开发一个 Web 应用程序,并尝试使用 QuillJS 作为所见即所得编辑器。我正在尝试使用“Bubble”主题,因为它与我的网络应用程序的其余部分非常适合,但是当工具提示应该出现时,它并没
main方法创建一个随机整数数组,然后调用升序和降序方法对数组进行排序。似乎当我调用升序和降序方法时,它会改变原始数组的值。打印时收到的输出是三个数组,全部按降序排序。 public static v
对于下面的 facebook 点赞按钮,按钮右侧有一个# of likes 气泡(?)(见下文 - 气泡上带有“3.5k”的文本) 问题是——它是用 css 绘制的吗?如何创建? 最佳答案 fiddl
如果字符串很长,则必须转到下一行。我该怎么做? Demo HTML Body 01-10 03:29:
给定冒泡排序算法: Algorithm BubbleSort(A[0...n]): for i <- 0 to n-2 do for j <- 0 to n-2-i do if
这个问题在这里已经有了答案: Is it possible for the child of a div set to pointer-events: none to have pointer ev
我正在尝试获取通知以在 MFC 应用程序中弹出类似这些气泡的内容: (来源:humanized.com) 我目前正在用 C# 制作一个界面模型,以向一些利益相关者展示,所以最好也有它。 它不一定非得是
我是一名优秀的程序员,十分优秀!