Highcharts-3-柱状图1

979 阅读9分钟

Highcharts绘制柱状图

本文介绍的是如何利用python-highcharts绘制柱状图

  • 水平/垂直柱状图
  • 蝴蝶柱状图
  • 堆叠柱状图

图形

首先我们直接看看最终的效果:

  • 4个洲
  • 个年份

点击年份的时候会隐藏或者显示

隐藏其中一个年份:

代码

原始数据和代码

使用pandas模拟数据

使用pandas来模拟生成上面的数据

# 使用DataFrame数据框

import pandas as pd

data = pd.DataFrame({
    "2000": [107, 31, 235, 203, 24],
    "2004": [133, 156, 947, 868, 106],
    "2008": [373, 914, 854, 732, 34],
    "2012": [652, 954, 1250, 740, 38]},
    
    index=['Africa''America''Asia''Europe''Oceania']
)

data

生成需要的4个data数据和分类categories

图形翻转

对上面的图形实现翻转效果,即显示为水平的柱状图,先看看最终的效果:

实现的方法只需要在上面的代码配置项中加上:

完整代码如下:

并行柱状图

效果图

原数据和代码

from highcharts import Highchart
H = Highchart(width=550, height=400)

# 1、数值分类区间
categories = ['0-4''5-9''10-14''15-19',
              '20-24''25-29''30-34''35-39', 
              '40-44','45-49''50-54''55-59', 
              '60-64''65-69','70-74''75-79', 
              '80-84''85-89''90-94','95-99''100 + ']
# 2、配置项
# 在这种图形中横轴和纵轴需要调换
options = {
 'chart': {  #  指定图表类型:柱状图
        'type''bar' 
    },
    'title': {  # 主标题
        'text''Population pyramid for Germany, midyear 2010'
    },
    'subtitle': {  # 副标题
        'text''Source: www.census.gov'
    },
    'xAxis': [{  # 左侧标签设置
        'categories': categories,
        'reversed'False,   # 分类区间是否翻转
        'labels': {
            'step'1  # 标签区间的间隔
        }
    }, {   # 右侧标签设置
        'opposite'True,
        'reversed'False,
        'categories': categories,
        'linkedTo'0,
        'labels': {
            'step'1
        }
    }],
    'yAxis': {
        'title': {
            'text'None
        },
        'labels': {  # y轴标签
            'formatter'"function () {\
                                    return (Math.abs(this.value) / 1000000) + 'M';\
                                }"
        },
        'min': -4000000,
        'max'4000000
    },

    'plotOptions': {
        'series': {
            'stacking''normal'
        }
    },

    'tooltip': {
        'formatter'"function () {\
                            return '<b>' + this.series.name + ', age ' + this.point.category + '</b><br/>' +\
                                'Population: ' + Highcharts.numberFormat(Math.abs(this.point.y), 0);\
                        }"
    },
}

# 设置男女的数值
data_male = [-1746181, -1884428, -2089758, -2222362,
             -2537431, -2507081, -2443179, -2664537, 
             -3556505, -3680231, -3143062, -2721122, 
             -2229181, -2227768,-2176300, -1329968, 
             -836804, -354784, -90569, -28367, -3878]

data_female = [1656154178756419816712108575, 
               2403438236600323014022519874,
               3360596349347330507752759560, 
               2304444242650425689381785638,
               1447162100501133087013063221208]

# 添加配置项
H.set_dict_options(options)

# 添加数据和指定图表类型bar
H.add_data_set(data_male, 'bar''Male')
H.add_data_set(data_female, 'bar''Female')

H

适用场景

当两个组别之间存在多个数值区间的时候,适用用此种图表

堆叠柱状图-stack bar

下面的代码是根据官网的源码进行修改得到的最后实现代码

from highcharts import Highchart   # 导入库 
H = Highchart(width=800, height=600)  # 设置图形的大小

# 配置数据项:根据源码修改
data1 = [53472]
data2 = [22321]
data3 = [34425]

options = {
    'chart': {
        'type''bar'  # 图表类型
    },
    'title': {  # 主标题
        'text''Stacked bar chart'
    },
    'xAxis': {
        'categories': ['Apples''Oranges''Pears''Grapes''Bananas']
    },
    'yAxis': {
        'min'0,
        'title': {
            'text''Total fruit consumption'
        }
    },
    'legend': {
        'reversed'True
    },
    'plotOptions': {
        'series': {
            'stacking''normal'
        }
    }
}

# 增加部分
H.set_dict_options(options)   # 添加配置

H.add_data_set(data1,'bar','John')
H.add_data_set(data2,'bar','Jane')
H.add_data_set(data3,'bar','Joe')

H

带有负值的柱状图-column with negative values

如何绘制带有负值的柱状图?

在柱状图上方将数据显示出来的配置

完整的代码如下所示:

from highcharts import Highchart   # 导入库 
H = Highchart(width=800, height=600)  # 设置图形的大小

# 配置数据项
data1 = [53, -472]
data2 = [223, -21]
data3 = [-34425]

options = {
    'chart': {  # 图表类型不是bar,而是column
        'type''column'  
    },
    'title': {  # 主标题
        'text''column with negative values'
    },
    'xAxis': {
        'categories': ['Apples''Oranges''Pears''Grapes''Bananas']
    },
    'yAxis': {
        'title': {
            'text''水果数量',  # y轴名称
            'align''high'
        },
        'labels': {
            'overflow''justify'
        }
    },
    'legend': {
        'reversed'True
    },
    'credits': {  # 右下角的版权信息
        'enabled'False
    },
    'plotOptions': {   # 将每个数据在柱状图上方显示出来
        'bar': {
            'dataLabels': {
                'enabled'True  # 显示数据(柱状图顶部的数据显示出来)
            }
        }
    }
}

H.set_dict_options(options)   # 添加配置
H.add_data_set(data1,'bar','John')
H.add_data_set(data2,'bar','Jane')
H.add_data_set(data3,'bar','Joe')

H

最终呈现的效果图: