Bokeh项目实战:使用Bokeh创建专业级柱状图可视化

Bokeh项目实战:使用Bokeh创建专业级柱状图可视化

bokeh bokeh/bokeh: 是一个用于创建交互式图形和数据的 Python 库。适合用于数据可视化、数据分析和呈现,以及创建动态的 Web 应用。特点是提供了一种简洁、直观的 API 来描述和处理数据,并生成交互式的可视化效果。 bokeh 项目地址: https://gitcode.com/gh_mirrors/bo/bokeh

柱状图是数据可视化中最常用的图表类型之一,它能直观地展示分类数据与数值数据之间的关系。本文将全面介绍如何使用Bokeh这一强大的Python可视化库来创建各种类型的柱状图。

1. 基础柱状图

在Bokeh中创建基础柱状图非常简单,主要使用hbar()(水平柱状图)和vbar()(垂直柱状图)两种方法。

1.1 分类数据准备

Bokeh支持处理分类数据,这些数据可以是简单的字符串序列:

fruits = ['苹果', '梨子', '油桃', '李子', '葡萄', '草莓']

也可以是层次化的嵌套结构:

季度月份 = [
    ("一季度", "1月"), ("一季度", "2月"), ("一季度", "3月"),
    ("二季度", "4月"), ("二季度", "5月"), ("二季度", "6月"),
    ("三季度", "7月"), ("三季度", "8月"), ("三季度", "9月"),
    ("四季度", "10月"), ("四季度", "11月"), ("四季度", "12月"),
]

1.2 创建基础柱状图

from bokeh.plotting import figure, show

# 准备数据
水果 = ['苹果', '梨子', '油桃', '李子', '葡萄', '草莓']
销量 = [5, 3, 4, 2, 4, 6]

# 创建图表
p = figure(x_range=水果, height=350, title="水果销量")
p.vbar(x=水果, top=销量, width=0.9)

show(p)

2. 柱状图高级功能

2.1 排序功能

为了让数据展示更加直观,我们经常需要对柱状图进行排序:

# 按销量排序
排序后的数据 = sorted(zip(水果, 销量), key=lambda x: x[1])
水果排序 = [x[0] for x in 排序后的数据]
销量排序 = [x[1] for x in 排序后的数据]

p = figure(x_range=水果排序, height=350, title="水果销量(排序)")
p.vbar(x=水果排序, top=销量排序, width=0.9)

2.2 颜色填充

Bokeh提供了多种方式来设置柱状图的颜色:

方法一:直接指定颜色列

from bokeh.models import ColumnDataSource

数据 = {
    '水果': 水果,
    '销量': 销量,
    '颜色': ['#3288bd', '#99d594', '#e6f598', '#fee08b', '#fc8d59', '#d53e4f']
}

源 = ColumnDataSource(数据)
p.vbar(x='水果', top='销量', width=0.9, color='颜色', source=源)

方法二:使用颜色映射器

from bokeh.transform import factor_cmap

颜色映射 = factor_cmap('水果', palette='Spectral6', factors=水果)
p.vbar(x='水果', top='销量', width=0.9, color=颜色映射, source=源)

3. 堆叠柱状图

当需要展示多个数据系列时,堆叠柱状图是一个很好的选择:

年份 = ['2019', '2020', '2021']
数据 = {
    '水果': 水果,
    '2019': [2, 1, 4, 3, 2, 4],
    '2020': [5, 3, 4, 2, 4, 6],
    '2021': [3, 2, 4, 4, 5, 3]
}

源 = ColumnDataSource(数据)
p = figure(x_range=水果, height=350, title="水果销量年度对比")

p.vbar_stack(年份, x='水果', width=0.9, color=['#3182bd', '#6baed6', '#9ecae1'], source=源)

4. 分组柱状图

4.1 嵌套分类

from bokeh.transform import factor_cmap

年份 = ['2019', '2020', '2021']
数据 = {
    '水果年份': [(f, y) for f in 水果 for y in 年份],
    '销量': [2,5,3,1,3,2,4,4,4,3,2,4,2,4,5,4,6,3]
}

源 = ColumnDataSource(数据)
p = figure(x_range=FactorRange(*数据['水果年份']), height=350)

颜色映射 = factor_cmap('水果年份', palette=['#3182bd', '#6baed6', '#9ecae1'], factors=年份, start=1, end=2)
p.vbar(x='水果年份', top='销量', width=0.9, source=源, line_color="white", fill_color=颜色映射)

4.2 视觉偏移

from bokeh.transform import dodge

源 = ColumnDataSource(数据)
p = figure(x_range=水果, height=350)

# 为每个年份创建偏移的柱状图
年份偏移 = {'2019': -0.3, '2020': 0, '2021': 0.3}
for 年, 颜色 in zip(年份, ['#3182bd', '#6baed6', '#9ecae1']):
    p.vbar(x=dodge('水果', 年份偏移[年], range=p.x_range), top=年, width=0.2, 
           source=源, color=颜色, legend_label=年)

5. 区间柱状图

柱状图不仅可以表示单一数值,还可以表示区间范围:

数据 = {
    '年份': ['2016', '2017', '2018', '2019', '2020'],
    '最小值': [9.5, 9.7, 9.6, 9.8, 9.9],
    '最大值': [10.2, 10.1, 10.3, 10.0, 10.4]
}

p = figure(y_range=数据['年份'], height=350, x_axis_label="时间(秒)")
p.hbar(y='年份', left='最小值', right='最大值', height=0.5, source=ColumnDataSource(数据))

6. 与Pandas集成

Bokeh与Pandas有很好的集成,可以方便地处理复杂数据:

import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    '制造商': ['A', 'A', 'B', 'B', 'C', 'C'],
    '气缸数': [4, 6, 4, 6, 4, 6],
    '油耗': [28, 22, 26, 20, 30, 24]
})

# 按气缸数分组
分组 = df.groupby('气缸数')
源 = ColumnDataSource(分组)

p = figure(x_range=分组, height=350)
p.vbar(x='气缸数', top='油耗_mean', width=0.9, source=源)

总结

本文详细介绍了使用Bokeh创建各种柱状图的方法,包括:

  1. 基础柱状图创建
  2. 排序和颜色设置技巧
  3. 堆叠和分组柱状图的实现
  4. 区间柱状图的应用
  5. 与Pandas的集成使用

Bokeh提供了丰富的功能和灵活的API,可以满足从简单到复杂的各种柱状图需求。通过掌握这些技巧,你可以创建出专业级的数据可视化图表。

bokeh bokeh/bokeh: 是一个用于创建交互式图形和数据的 Python 库。适合用于数据可视化、数据分析和呈现,以及创建动态的 Web 应用。特点是提供了一种简洁、直观的 API 来描述和处理数据,并生成交互式的可视化效果。 bokeh 项目地址: https://gitcode.com/gh_mirrors/bo/bokeh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶名战Blanche

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值