如何在高图中创建这样的饼图/圆环图?
How to create such pie chart/ donut chart in highchart?
我今天才开始使用highchart。我有以下查询。谁能帮帮我?
$(function () {
var colors = Highcharts.getOptions().colors,
categories = ['HIGH', 'MODERATE', 'CRITICAL'],
data = [{
y: 33.33,
color: '#a6b9c1',
drilldown: {
name: 'MSIE versions',
categories: ['MSIE 6.0', 'MSIE 7.0'],
data: [0.5, 0.5],
color: ['#30add9','#306885']
}
}, {
y: 33.33,
color: '#a6b9c1',
drilldown: {
name: 'Firefox versions',
categories: ['Firefox v31', 'Firefox v32'],
data: [0.5, 0.5],
color: ['#30add9','#306885']
}
}, {
y: 33.33,
color: '#a6b9c1',
drilldown: {
name: 'Chrome versions',
categories: ['Chrome v30.0', 'Chrome v31.0', 'Chrome v32.0'],
data: [0.34, 0.33, 0.33],
color: ['#23377b','#30add9','#306885']
}
}],
browserData = [],
versionsData = [],
i,
j,
dataLen = data.length,
drillDataLen,
brightness;
// Build the data arrays
for (i = 0; i < dataLen; i += 1) {
// add browser data
browserData.push({
name: categories[i],
y: data[i].y,
color: data[i].color
});
// add version data
drillDataLen = data[i].drilldown.data.length;
for (j = 0; j < drillDataLen; j += 1) {
versionsData.push({
name: data[i].drilldown.categories[j],
y: data[i].drilldown.data[j],
color: data[i].drilldown.color[j]
});
}
}
// Create the chart
$('#container').highcharts({
chart: {
type: 'pie'
},
title: {
text: 'OUR<br>MATERIAL<br>ISSUES',
align: 'center',
verticalAlign: 'middle',
y: 0
},
subtitle: {
text: 'Source: <a href="http://netmarketshare.com/">netmarketshare.com</a>'
},
plotOptions: {
pie: {
shadow: false,
// borderWidth:10,
center: ['50%', '50%'],
slicedOffset: 10,
states: {
hover: false
}
}
},
tooltip: {
enabled: false
},
series: [{
name: 'Browsers',
data: browserData,
size: '60%',
innerSize: '50%',
dataLabels: {
formatter: function () {
return this.point.name;
},
color: '#3f377f',
rotation: -20,
// rotation: rotate(),
distance: -40
}
}, {
name: 'Versions',
data: versionsData,
// borderWidth:0,
size: '100%',
innerSize: '60%',
dataLabels: {
// useHTML:true,
formatter: function () {
return this.point.name;
},
color: '#000'
//inside:true
},
allowPointSelect: false,
stickyTracking: false,
point: {
events: {
mouseOver: function() {
var point = this,
points = this.series.points;
// unslice sliced element(s)
for (var key in points) {
if (points[key].sliced) {
points[key].slice(false);
}
}
// slice hovered element
if (!point.selected) {
point.slice(true);
}
}
}
},
events: {
mouseOut: function(event) {
// unslice sliced element(s)
for (var key in this.points) {
if (this.points[key].sliced) {
this.points[key].slice(false);
}
}
}
}
}]
});
});
在第一个级别上,有 3 个级别 - 高、严重和中等。如果我使用 rotation:-20 & distance:-40 它会正确对齐关键标签。我想要对所有 3 个标签进行这种类型的对齐。谁能帮我怎么做?
我还想按照附图在第二层添加数据。每个数据都会有一个与之关联的 hyperlink。截至目前,您只能看到一个标签 - MSIE 6 和类似标签,取而代之的是,我想添加多个看起来类似于附加图像的标签。试了很多,还是无法操作enter image description here
UPDATE - 我已经处理了一些其他的事情并且还使图表响应。但我对此确实有一些疑问。
是否可以将曲线赋予内部标签 - HIGH、CRITICAL 和 MODERATE,如图中所示?
我在二级圆环图中看到了 ul-li 结构的信息。截至目前,您已使用 <br>
标记来打断线条,但由于此图表也是响应式的,我们能否为 div 提供宽度,以便在调整大小的情况下,如果数据外出,它将受所有 7 个切片的 div 宽度的约束 - DONE
此外,div 内部有一个跨度,它会自动到达顶部和左侧,这就是为什么整个信息 ul-li 结构有些不利。是否可以根据位置为每个二级圆环图计算并应用它?我无法理解动态 css 是如何应用于它的
ul 中的每个 li 都会有一个 link。所以单击那个 li - 我可以转到那个特定页面 - 我尝试应用它但成功了。 --
姓名:
<ul><li><a href="http://wikipedia.org" target="_blank">text in first line</a></li><li>second line</li><li>third line<br/>that was long</li></ul>
这很有魅力。但是点击后,从打开的页面回到那个页面,切片效果还在,请问有什么办法吗?
在一级圆环图上,有 3 个标签。但其中 2 个具有不同的结构,1 个具有另一种结构。我不明白背后的原因。如果您可以打开开发人员工具并检查它们,您可以清楚地看到差异。一个是 <g> - <text> - <tspan>
而另一个是 <div> - <span>
谁能解释一下?
让我们将此图表分成 2 个问题:
- 旋转的数据标签 - 可以根据
dataLabel
- API reference 设置旋转。可以创建一个函数,自动为所有 dataLabels
设置旋转。
相似主题:
with different rotation angles to better match your chart: http://jsfiddle.net/j7as86gh/12/
- 切片中的文本 - 这个问题可以通过
dataLables
解决,如果您的图表足够大以容纳所有文本。要在每个切片中启用带点的列表,您可以将 useHTML
设置为 true
for dataLabels
.
a) http://jsfiddle.net/3v3xfh6e/
另一种方法是使用工具提示显示每个切片的信息。
我今天才开始使用highchart。我有以下查询。谁能帮帮我?
$(function () {
var colors = Highcharts.getOptions().colors,
categories = ['HIGH', 'MODERATE', 'CRITICAL'],
data = [{
y: 33.33,
color: '#a6b9c1',
drilldown: {
name: 'MSIE versions',
categories: ['MSIE 6.0', 'MSIE 7.0'],
data: [0.5, 0.5],
color: ['#30add9','#306885']
}
}, {
y: 33.33,
color: '#a6b9c1',
drilldown: {
name: 'Firefox versions',
categories: ['Firefox v31', 'Firefox v32'],
data: [0.5, 0.5],
color: ['#30add9','#306885']
}
}, {
y: 33.33,
color: '#a6b9c1',
drilldown: {
name: 'Chrome versions',
categories: ['Chrome v30.0', 'Chrome v31.0', 'Chrome v32.0'],
data: [0.34, 0.33, 0.33],
color: ['#23377b','#30add9','#306885']
}
}],
browserData = [],
versionsData = [],
i,
j,
dataLen = data.length,
drillDataLen,
brightness;
// Build the data arrays
for (i = 0; i < dataLen; i += 1) {
// add browser data
browserData.push({
name: categories[i],
y: data[i].y,
color: data[i].color
});
// add version data
drillDataLen = data[i].drilldown.data.length;
for (j = 0; j < drillDataLen; j += 1) {
versionsData.push({
name: data[i].drilldown.categories[j],
y: data[i].drilldown.data[j],
color: data[i].drilldown.color[j]
});
}
}
// Create the chart
$('#container').highcharts({
chart: {
type: 'pie'
},
title: {
text: 'OUR<br>MATERIAL<br>ISSUES',
align: 'center',
verticalAlign: 'middle',
y: 0
},
subtitle: {
text: 'Source: <a href="http://netmarketshare.com/">netmarketshare.com</a>'
},
plotOptions: {
pie: {
shadow: false,
// borderWidth:10,
center: ['50%', '50%'],
slicedOffset: 10,
states: {
hover: false
}
}
},
tooltip: {
enabled: false
},
series: [{
name: 'Browsers',
data: browserData,
size: '60%',
innerSize: '50%',
dataLabels: {
formatter: function () {
return this.point.name;
},
color: '#3f377f',
rotation: -20,
// rotation: rotate(),
distance: -40
}
}, {
name: 'Versions',
data: versionsData,
// borderWidth:0,
size: '100%',
innerSize: '60%',
dataLabels: {
// useHTML:true,
formatter: function () {
return this.point.name;
},
color: '#000'
//inside:true
},
allowPointSelect: false,
stickyTracking: false,
point: {
events: {
mouseOver: function() {
var point = this,
points = this.series.points;
// unslice sliced element(s)
for (var key in points) {
if (points[key].sliced) {
points[key].slice(false);
}
}
// slice hovered element
if (!point.selected) {
point.slice(true);
}
}
}
},
events: {
mouseOut: function(event) {
// unslice sliced element(s)
for (var key in this.points) {
if (this.points[key].sliced) {
this.points[key].slice(false);
}
}
}
}
}]
});
});
在第一个级别上,有 3 个级别 - 高、严重和中等。如果我使用 rotation:-20 & distance:-40 它会正确对齐关键标签。我想要对所有 3 个标签进行这种类型的对齐。谁能帮我怎么做?
我还想按照附图在第二层添加数据。每个数据都会有一个与之关联的 hyperlink。截至目前,您只能看到一个标签 - MSIE 6 和类似标签,取而代之的是,我想添加多个看起来类似于附加图像的标签。试了很多,还是无法操作enter image description here
UPDATE - 我已经处理了一些其他的事情并且还使图表响应。但我对此确实有一些疑问。
是否可以将曲线赋予内部标签 - HIGH、CRITICAL 和 MODERATE,如图中所示?
我在二级圆环图中看到了 ul-li 结构的信息。截至目前,您已使用
<br>
标记来打断线条,但由于此图表也是响应式的,我们能否为 div 提供宽度,以便在调整大小的情况下,如果数据外出,它将受所有 7 个切片的 div 宽度的约束 - DONE此外,div 内部有一个跨度,它会自动到达顶部和左侧,这就是为什么整个信息 ul-li 结构有些不利。是否可以根据位置为每个二级圆环图计算并应用它?我无法理解动态 css 是如何应用于它的
ul 中的每个 li 都会有一个 link。所以单击那个 li - 我可以转到那个特定页面 - 我尝试应用它但成功了。 --
姓名:
<ul><li><a href="http://wikipedia.org" target="_blank">text in first line</a></li><li>second line</li><li>third line<br/>that was long</li></ul>
这很有魅力。但是点击后,从打开的页面回到那个页面,切片效果还在,请问有什么办法吗?
在一级圆环图上,有 3 个标签。但其中 2 个具有不同的结构,1 个具有另一种结构。我不明白背后的原因。如果您可以打开开发人员工具并检查它们,您可以清楚地看到差异。一个是
<g> - <text> - <tspan>
而另一个是<div> - <span>
谁能解释一下?
让我们将此图表分成 2 个问题:
- 旋转的数据标签 - 可以根据
dataLabel
- API reference 设置旋转。可以创建一个函数,自动为所有dataLabels
设置旋转。
相似主题:
- 切片中的文本 - 这个问题可以通过
dataLables
解决,如果您的图表足够大以容纳所有文本。要在每个切片中启用带点的列表,您可以将useHTML
设置为true
fordataLabels
.
a) http://jsfiddle.net/3v3xfh6e/
另一种方法是使用工具提示显示每个切片的信息。