首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Highcharts-3-绘制柱状图

Highcharts-3-绘制柱状图

作者头像
皮大大
发布于 2021-03-01 03:22:52
发布于 2021-03-01 03:22:52
2.7K00
代码可运行
举报
运行总次数:0
代码可运行

Highcharts-3-绘制柱状图

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

  • 水平/垂直柱状图
  • 蝴蝶柱状图
  • 堆叠柱状图
  • 带有负值柱状图

水平/垂直柱状图

图形

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

  • 4个洲
  • 5个年份

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

隐藏其中一个年份:

代码
原始数据和代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from highcharts import Highchart   # 导入库
H = Highchart(width=750, height=600)  # 设置图形的大小

# 4组数据:代表的是4个年份
data1 = [107, 31, 235, 203, 24]  # 每个洲有一个数据
data2 = [133, 156, 947, 868, 106]
data3 = [373, 914, 854, 732, 34]
data4 = [652, 954, 1250, 740, 38]

# 进行配置
options = {
	'title': {  # 1、主标题
        'text': 'Stacked bar chart'
    },

    'subtitle': {   # 2、副标题:可以使用带有HTML标签的代码
        'text': 'Source: <a href="https://en.wikipedia.org/wiki/World_population">Wikipedia.org</a>'
    },

    'xAxis': {   # 3、横轴的5个分类
        'categories': ['Africa', 'America', 'Asia', 'Europe', 'Oceania'],
        'title': {
            'text': "5个洲"   # x轴的名称
        }
    },
    'yAxis': {
        'min': 0,  # 设置最小值
        'title': {
            'text': '人口数(百万)',  # y轴名称
            'align': 'high'
        },
        'labels': {
            'overflow': 'justify'
        }
    },
    'tooltip': {
        'valueSuffix': ' millions'
    },
    'legend': {  # 图例设置
        'layout': 'vertical',   # 垂直方向
        'align': 'right',  # 靠右显示
        'verticalAlign': 'top',   # 顶部
        'x': -40,
        'y': 80,
        'floating': True,
        'borderWidth': 2,    # 图例外围线条宽度
        'backgroundColor': "((Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#9ACFF0')", # 图例背景颜色
        'shadow': True
    },
    'credits': {  # 右下角的版权标签
        'enabled': True
    },
    'plotOptions': {
        'bar': {
            'dataLabels': {
                'enabled': True  # 显示数据(柱状图顶部的数据显示出来)
            }
        }
    }
}

H.set_dict_options(options)   # 添加配置

# 每个年份添加一组数据
H.add_data_set(data1, 'bar', 'Year 2000')
H.add_data_set(data2, 'bar', 'Year 2004')
H.add_data_set(data3, 'bar', 'Year 2008')
H.add_data_set(data4, 'bar', 'Year 2012')

# jupyter notebook中显示图形
H
使用pandas模拟数据

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用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

图形翻转

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

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

完整代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from highcharts import Highchart   # 导入库
H = Highchart(width=750, height=600)  # 设置图形的大小

# 4组数据,代表4个年份
# 每组5个数据代表的是5个洲
data1 = [107, 31, 235, 203, 24]
data2 = [133, 156, 947, 868, 106]
data3 = [373, 914, 854, 732, 34]
data4 = [652, 954, 1250, 740, 38]

# 进行配置
options = {
    'chart': {  # 加上chart配置变成水平柱状图
        'type': 'bar'
    },
	'title': {  # 1、主标题
        'text': 'Stacked bar chart'
    },

    'subtitle': {   # 2、副标题
        'text': 'Source: <a href="https://en.wikipedia.org/wiki/World_population">Wikipedia.org</a>'
    },

    'xAxis': {   # 3、横轴的5个分类
        'categories': ['Africa', 'America', 'Asia', 'Europe', 'Oceania'],
        'title': {
            'text': "5个洲"   # x轴的名称
        }
    },
    'yAxis': {
        'min': 0,  # 设置最小值
        'title': {
            'text': '人口数(百万)',  # y轴名称
            'align': 'high'
        },
        'labels': {
            'overflow': 'justify'
        }
    },
    'tooltip': {
        'valueSuffix': ' millions'
    },
    'legend': {  # 图例设置
        'layout': 'vertical',   # 垂直方向
        'align': 'right',  # 靠右显示
        'verticalAlign': 'top',   # 顶部
        'x': -40,
        'y': 80,
        'floating': True,
        'borderWidth': 2,    # 图例外围线条宽度
        'backgroundColor': "((Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#9ACFF0')",#图例背景颜色
        'shadow': True
    },
    'credits': {  # 右下角的版权标签
        'enabled': True
    },
    'plotOptions': {
        'bar': {
            'dataLabels': {
                'enabled': True  # 显示数据(柱状图顶部的数据显示出来)
            }
        }
    }
}

H.set_dict_options(options)   # 添加配置

# 每个年份添加一组数据
H.add_data_set(data1, 'bar', 'Year 2000')
H.add_data_set(data2, 'bar', 'Year 2004')
H.add_data_set(data3, 'bar', 'Year 2008')
H.add_data_set(data4, 'bar', 'Year 2012')

H

蝴蝶柱状图?

效果图
原数据和代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 = [1656154, 1787564, 1981671, 2108575,
               2403438, 2366003, 2301402, 2519874,
               3360596, 3493473, 3050775, 2759560,
               2304444, 2426504, 2568938, 1785638,
               1447162, 1005011, 330870, 130632, 21208]

# 添加配置项
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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from highcharts import Highchart   # 导入库
H = Highchart(width=800, height=600)  # 设置图形的大小

# 配置数据项:根据源码修改
data1 = [5, 3, 4, 7, 2]
data2 = [2, 2, 3, 2, 1]
data3 = [3, 4, 4, 2, 5]

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

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

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

完整的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from highcharts import Highchart   # 导入库
H = Highchart(width=800, height=600)  # 设置图形的大小

# 配置数据项
data1 = [5, 3, -4, 7, 2]
data2 = [2, 2, 3, -2, 1]
data3 = [-3, 4, 4, 2, 5]

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

最终呈现的效果图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-2-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
​LeetCode刷题实战437:路径总和 III
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/11/15
3050
​LeetCode刷题实战436:寻找右区间
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/11/15
2700
​LeetCode刷题实战557:反转字符串中的单词 III
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/04/12
3200
​LeetCode刷题实战58:最后一个单词的长度
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2810
​LeetCode刷题实战527:单词缩写
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
3800
​LeetCode刷题实战449:序列化和反序列化二叉搜索树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/11/29
3640
​LeetCode刷题实战551:学生出勤记录 I
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/04/12
2770
​LeetCode刷题实战451:根据字符出现频率排序
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/12/06
3030
​LeetCode刷题实战537:复数乘法
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
2530
​LeetCode刷题实战537:复数乘法
​LeetCode刷题实战30:串联所有单词的子串
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3580
​LeetCode刷题实战98:验证二叉搜索树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3100
​LeetCode刷题实战98:验证二叉搜索树
​LeetCode刷题实战435:无重叠区间
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/11/15
3620
【 关关的刷题日记49】 Leetcode 434. Number of Segments in a String
关关的刷题日记49 – Leetcode 434. Number of Segments in a String 题目 Count the number of segments in a string, where a segment is defined to be a contiguous sequence of non-space characters. Please note that the string does not contain any non-printable characters.
WZEARW
2018/04/11
5510
​LeetCode刷题实战536: 从字符串生成二叉树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
6230
​LeetCode刷题实战459:重复的子字符串
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/12/06
4130
【算法千题案例】每日LeetCode打卡——76.字符串中的单词数
计算字符串中单词的数量,就等同于计数单词的第一个下标的个数。因此,我们只需要遍历整个字符串,统计每个单词的第一个下标的数目即可。
呆呆敲代码的小Y
2021/11/17
3400
【算法千题案例】每日LeetCode打卡——76.字符串中的单词数
【leetcode刷题】T75-字符串中的单词数
设置变量flag标记是否为连续非空格字符,当遇到空格,则改为false;遇到非空格且flag==false,计数加1,flag改为true。
木又AI帮
2019/07/17
3880
​LeetCode刷题实战560:和为 K 的子数组
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/04/12
2980
​LeetCode刷题实战151:翻转字符串里的单词
https://leetcode-cn.com/problems/reverse-words-in-a-string/
程序员小猿
2021/01/19
7530
​LeetCode刷题实战151:翻转字符串里的单词
【Leetcode -415.字符串相加 - 434.字符串中的单词数】
题目:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
YoungMLet
2024/03/01
1420
推荐阅读
相关推荐
​LeetCode刷题实战437:路径总和 III
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • Highcharts-3-绘制柱状图
  • 水平/垂直柱状图
    • 图形
    • 代码
      • 原始数据和代码
      • 使用pandas模拟数据
    • 图形翻转
  • 蝴蝶柱状图?
    • 效果图
    • 原数据和代码
    • 适用场景
  • 堆叠柱状图-stack bar
  • 带有负值的柱状图-column with negative values
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档