【问题标题】:How to create such pie chart/ donut chart in highchart?如何在 highchart 中创建这样的饼图/甜甜圈图?
【发布时间】:2016-06-03 02:45:01
【问题描述】:

我今天才开始使用 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);
                            }
                        }
                    }
                }
        }]
    });
});

FIDDLE

在第一级,有 3 个级别 - 高、关键和中等。如果我使用旋转:-20 和距离:-40,它会正确对齐关键标签。我想要对所有 3 个标签进行这种类型的对齐。谁能帮我怎么做??

我还想根据附加图像在第二级添加数据。每个数据都有一个与之关联的超链接。截至目前,您只能看到一个标签 - MSIE 6 和类似标签,代替它,我想添加多个看起来类似于附加图像的标签。试了很多,还是不能操作。enter image description here

更新 - 我已经处理了一些其他的事情,并且还使图表具有响应性。但我确实对此有一些疑问。

  1. 是否可以为内部标签提供曲线 - HIGH、CRITICAL 和 MODERATE,就像它在图像中显示的那样?

  2. 我在 2 级圆环图中看到了 ul-li 结构的信息。到目前为止,您已经使用&lt;br&gt; 标记来换行,但是由于此图表也是响应式的,我们不能给 div 指定宽度,以便在调整大小的情况下,如果数据流出,它将被所有 7 个切片的 div 宽度 - DONE

  3. 另外,在 div 内部有一个 span 会自动向上和向左移动,这就是为什么整个 info ul-li 结构会有些下降的原因。是否可以根据位置为每个 2 级甜甜圈图计算并应用它?我无法理解动态 CSS 是如何应用到它的

  4. ul 中的每个 li 都会有一个链接。所以点击那个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>
    

    这就像一个魅力。但是点击后,如果我从打开的页面回到那个页面,切片效果仍然存在,有什么办法吗?

  5. 在 1 级圆环图上,有 3 个标签。但其中,2 个具有不同的结构,1 个具有另一种结构。我不明白这背后的原因。如果您可以打开开发人员工具并检查它们,您可以清楚地看到差异。一个是&lt;g&gt; - &lt;text&gt; - &lt;tspan&gt; 而另一个是&lt;div&gt; - &lt;span&gt; 谁能解释一下?

【问题讨论】:

    标签: javascript html highcharts pie-chart donut-chart


    【解决方案1】:

    让我们把这张图表分成两期:

    1. Rotated dataLabels - 可以根据dataLabel - API reference 设置旋转。可以创建一个自动为所有dataLabels 设置旋转的函数。

    类似话题:Rotating dataLabels in a Highcharts pie chart

    Grzegorz's solution 具有不同的旋转角度以更好地匹配您的图表:http://jsfiddle.net/j7as86gh/12/

    1. 切片中的文本 - 如果您的图表足够大以容纳所有文本,则此问题可以通过 dataLables 解决。要在每个切片中启用带有点的列表,您可以将 useHTML 设置为 truedataLabels

    a)http://jsfiddle.net/3v3xfh6e/

    另一种方法是使用工具提示来显示每个切片的信息。

    b)http://jsfiddle.net/3v3xfh6e/1/

    【讨论】:

    • 非常感谢您的快速帮助。我做了一些其他的事情并更新了小提琴。我确实有一些关于它的疑问,我已经在上面征募了
    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多