如何将链接添加到 chart.js(甜甜圈图表)?
How to add links to chart.js (Doughnut Charts)?
我想添加圆环图的链接,以便能够向用户发送一个页面,其中包含按点击选项过滤的记录。
例如 here,如果用户点击 "Green",我想将用户发送到一个页面,该页面将显示所有 "Green" 条记录。
我没有找到一个简单的方法来做到这一点,并尝试了这样的方法,但还没有奏效:
(我添加了一个属性 "filter" 和 "id" 我需要过滤它)
var data = [
{
value: 300,
color:"#F7464A",
highlight: "#FF5A5E",
label: "Red",
filter: 1
},
{
value: 50,
color: "#46BFBD",
highlight: "#5AD3D1",
label: "Green",
filter: 2
},
{
value: 100,
color: "#FDB45C",
highlight: "#FFC870",
label: "Yellow",
filter: 3
}
]
$(document).ready(
function () {
$("#chart").click(
function(evt){
var activePoints = chart.getSegmentsAtEvent(evt);
var url = "http://example.com/?grid[f][collor][]=" + activePoints[0].filter
alert(url);
}
);
}
);
我无法使用 "activePoints[0].filter"
获取属性 "filter"
谢谢。
在 JSON 中添加自定义属性可能是 v2 (https://github.com/nnnick/Chart.js/issues/1185) 路线图上的一项功能。按照目前的情况,您可以在 javascript 中添加属性,如下所示:
var segments = chart.segments;
for (var i = 0; i < segments.length; i++) {
segments[i].filter = i+1;
}
这是一个在 url (http://jsfiddle.net/tcy74pcc/1/) 中加载 filter/id 属性 的 jsfiddle:
如果您想使用基于点而不是线段的图表来执行此操作,这里有一个 post 具有类似的线解决方案:
Displaying custom dataset properties in tooltip in chart.js
希望对您有所帮助。祝你好运!
getSegmentsAtEvent 现已弃用。请改用 getElementsAtEvent。
这是完整的功能,每个部分都有动态颜色。
var piChart = function (ctx, labelName, labels, values, filters) {
var colors = dynamicColors(values.length)
var data = {
labels: labels,
datasets: [
{
label: labelName,
backgroundColor: colors.backColors,
hoverBackgroundColor: colors.highColors,
borderColor: colors.borders,
hoverBorderColor: colors.borders,
borderWidth: 1,
data: values
}
]
};
var pieChart = new Chart(ctx, {
type: "pie",
data: data
});
if (filters != null) {
ctx.click(
function (evt) {
var activePoints = pieChart.getElementAtEvent(evt);
if (activePoints.length > 0) {
var index = activePoints[0]["_index"];
location.href = filters[index];
}
});
}
}
var dynamicColors = function (count) {
var backColors = [];
var highColors = [];
var borders = [];
for (var i = 0; i < count; i++) {
var r = Math.floor(Math.random() * 255);
var g = Math.floor(Math.random() * 255);
var b = Math.floor(Math.random() * 255);
var backColor = "rgba(" + r + "," + g + "," + b + ", 0.4)";
var highColor = "rgba(" + r + "," + g + "," + b + ", 0.8)";
var border = "rgba(" + r + "," + g + "," + b + ", 1)";
backColors.push(backColor);
highColors.push(highColor);
borders.push(border);
}
我想添加圆环图的链接,以便能够向用户发送一个页面,其中包含按点击选项过滤的记录。
例如 here,如果用户点击 "Green",我想将用户发送到一个页面,该页面将显示所有 "Green" 条记录。
我没有找到一个简单的方法来做到这一点,并尝试了这样的方法,但还没有奏效:
(我添加了一个属性 "filter" 和 "id" 我需要过滤它)
var data = [
{
value: 300,
color:"#F7464A",
highlight: "#FF5A5E",
label: "Red",
filter: 1
},
{
value: 50,
color: "#46BFBD",
highlight: "#5AD3D1",
label: "Green",
filter: 2
},
{
value: 100,
color: "#FDB45C",
highlight: "#FFC870",
label: "Yellow",
filter: 3
}
]
$(document).ready(
function () {
$("#chart").click(
function(evt){
var activePoints = chart.getSegmentsAtEvent(evt);
var url = "http://example.com/?grid[f][collor][]=" + activePoints[0].filter
alert(url);
}
);
}
);
我无法使用 "activePoints[0].filter"
获取属性 "filter"谢谢。
在 JSON 中添加自定义属性可能是 v2 (https://github.com/nnnick/Chart.js/issues/1185) 路线图上的一项功能。按照目前的情况,您可以在 javascript 中添加属性,如下所示:
var segments = chart.segments;
for (var i = 0; i < segments.length; i++) {
segments[i].filter = i+1;
}
这是一个在 url (http://jsfiddle.net/tcy74pcc/1/) 中加载 filter/id 属性 的 jsfiddle:
如果您想使用基于点而不是线段的图表来执行此操作,这里有一个 post 具有类似的线解决方案: Displaying custom dataset properties in tooltip in chart.js
希望对您有所帮助。祝你好运!
getSegmentsAtEvent 现已弃用。请改用 getElementsAtEvent。
这是完整的功能,每个部分都有动态颜色。
var piChart = function (ctx, labelName, labels, values, filters) {
var colors = dynamicColors(values.length)
var data = {
labels: labels,
datasets: [
{
label: labelName,
backgroundColor: colors.backColors,
hoverBackgroundColor: colors.highColors,
borderColor: colors.borders,
hoverBorderColor: colors.borders,
borderWidth: 1,
data: values
}
]
};
var pieChart = new Chart(ctx, {
type: "pie",
data: data
});
if (filters != null) {
ctx.click(
function (evt) {
var activePoints = pieChart.getElementAtEvent(evt);
if (activePoints.length > 0) {
var index = activePoints[0]["_index"];
location.href = filters[index];
}
});
}
}
var dynamicColors = function (count) {
var backColors = [];
var highColors = [];
var borders = [];
for (var i = 0; i < count; i++) {
var r = Math.floor(Math.random() * 255);
var g = Math.floor(Math.random() * 255);
var b = Math.floor(Math.random() * 255);
var backColor = "rgba(" + r + "," + g + "," + b + ", 0.4)";
var highColor = "rgba(" + r + "," + g + "," + b + ", 0.8)";
var border = "rgba(" + r + "," + g + "," + b + ", 1)";
backColors.push(backColor);
highColors.push(highColor);
borders.push(border);
}