Highcharts-9-双饼图绘制

2021-03-07 10:35:04 浏览数 (1)

Highcharts-9-双饼图制作

本文中只介绍一种和饼图相关的图形:双饼图

双饼图

效果
代码
代码语言:javascript复制
# -*- coding: utf-8 -*-
"""
说明:制作双饼图
作者:Peter
"""
# 导入库
from highcharts import Highchart
# 实例化
H = Highchart(width = 850, height = 400)

# 数据部分:第一层数据 下钻后的数据,需要指定数据大小、名称、颜色
data = [{
            'y': 55.11,  # 第一层百分比
            'color': 'Highcharts.getOptions().colors[0]',  # 颜色的获取
            'drilldown': {
                'name': 'MSIE versions',  # 下钻名称
                'categories': ['MSIE 6.0', 'MSIE 7.0', 'MSIE 8.0', 'MSIE 9.0'],  # 下钻之后的类别
                'data': [10.85, 7.35, 33.06, 3.85],  # 下钻数据大小
                'color': 'Highcharts.getOptions().colors[0]'
            }
        }, {
            'y': 21.63,
            'color': 'Highcharts.getOptions().colors[1]',
            'drilldown': {
                'name': 'Firefox versions',
                'categories': ['Firefox 2.0', 'Firefox 3.0', 'Firefox 3.5', 'Firefox 3.6', 'Firefox 4.0'],
                'data': [0.20, 0.83, 1.58, 13.12, 5.9],
                'color': 'Highcharts.getOptions().colors[1]'
            }
        }, {
            'y': 11.94,
            'color': 'Highcharts.getOptions().colors[2]',
            'drilldown': {
                'name': 'Chrome versions',
                'categories': ['Chrome 5.0', 'Chrome 6.0', 'Chrome 7.0', 'Chrome 8.0', 'Chrome 9.0',
                    'Chrome 10.0', 'Chrome 11.0', 'Chrome 12.0'],
                'data': [0.12, 0.19, 0.12, 0.36, 0.32, 9.91, 0.50, 0.42],
                'color': 'Highcharts.getOptions().colors[2]'
            }
        }, {
            'y': 7.15,
            'color': 'Highcharts.getOptions().colors[3]',
            'drilldown': {
                'name': 'Safari versions',
                'categories': ['Safari 5.0', 'Safari 4.0', 'Safari Win 5.0', 'Safari 4.1', 'Safari/Maxthon',
                    'Safari 3.1', 'Safari 4.1'],
                'data': [4.55, 1.42, 0.23, 0.21, 0.20, 0.19, 0.35],
                'color': 'Highcharts.getOptions().colors[3]'
            }
        }, {
            'y': 2.14,
            'color': 'Highcharts.getOptions().colors[4]',
            'drilldown': {
                'name': 'Opera versions',
                'categories': ['Opera 9.x', 'Opera 10.x', 'Opera 11.x'],
                'data': [ 0.12, 0.37, 1.65],
                'color': 'Highcharts.getOptions().colors[4]'
            }
        }]

options = {
	'chart': {  # 图表类型:饼图
        'type': 'pie'
    },
    'title': { # 标题设置
        'text': 'Browser market share, April, 2011'
    },
    'yAxis': {  # y轴标题
        'title': {
            'text': 'Total percent market share'
        }
    },
    'plotOptions': {
        'pie': {
            'shadow': False,  # 是否显示阴影
            'center': ['50%', '50%']
        }
    },
    'tooltip': {
        'valueSuffix': '%'  # 数据提示框中数据的后缀%
    },
}


categories = ['MSIE', 'Firefox', 'Chrome', 'Safari', 'Opera']
browserData = []
versionsData = []

for i in range(len(data)):

    browserData.append({  # 对第一层数据进行设置,存放到列表中
        'name': categories[i],
        'y': data[i]['y'],
        'color': data[i]['color']
        })

    drillDataLen = len(data[i]['drilldown']['data'])
    for j in range(drillDataLen):  # 下钻后数据的设置

        brightness = 0.2 - (j / drillDataLen) / 5;
        versionsData.append({
            'name': data[i]['drilldown']['categories'][j],
            'y': data[i]['drilldown']['data'][j],
            'color': 'Highcharts.Color('   data[i]['color']   ').brighten('   str(brightness)   ').get()'
        })

H.set_dict_options(options)

# 第一层数据的添加和设置
H.add_data_set(browserData,  # 数据
               'pie',  # 类型
               'Browsers',  # 名称
               size='60%', # 所占比例
            dataLabels={  # 数据标签设置
                'formatter': 'function () { 
                                    return this.y > 5 ? this.point.name : null;
                                }',
                'color': 'white',
                'distance': -30
            })

# 第二层数据的添加和设置
H.add_data_set(versionsData,
               'pie',
               'Versions',
               size='80%',
            innerSize='60%',  # 内圈的大小
            dataLabels={
                'formatter': "function () {
                                    return this.y > 1 ? '<b>'   this.point.name   ':</b> '   this.y   '%'  : null;
                                }"
            })

H

具体过程

1、设置最里层(第一层)的数据

2、设置第二层的数据,相加之后等于其所属的第一层数据

3、外层数据和里层数据绘图之后颜色保持一致:

0 人点赞