Python数据可视化库—Bokeh与Altair指南

👽发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。

在数据科学和数据分析领域,数据可视化是一种强大的工具,可以帮助我们更好地理解数据、发现模式和趋势。Python作为一种流行的数据科学工具,拥有多种数据可视化库。本文将重点比较Bokeh和Altair这两个常用的Python数据可视化库,探讨它们的优缺点以及在不同场景下的适用性。

Bokeh 简介

Bokeh是一个交互式可视化库,它能够创建各种类型的交互式图表,包括散点图、线图、条形图等。Bokeh提供了丰富的工具,使用户能够在图表中进行缩放、平移和选择等操作。

Altair 简介

Altair是一个基于Vega和Vega-Lite的声明式统计可视化库。它的设计理念是简单性和一致性,使用者只需通过简单的Python语法即可创建复杂的可视化图表,而无需深入了解底层的绘图细节。

Bokeh 与 Altair 的比较

  1. 易用性

    • Bokeh:相对而言,Bokeh的学习曲线较为陡峭,需要一定的时间来掌握其强大的交互功能和绘图选项。
    • Altair:Altair的语法相对简单直观,使用者可以更快速地创建出漂亮的图表,对于新手来说更易上手。
  2. 交互性

    • Bokeh:Bokeh提供了丰富的交互工具,可以轻松地创建交互式图表,并且支持自定义交互行为。
    • Altair:虽然Altair的交互功能相对较少,但是它可以无缝地与其他交互库(如Panel)集成,实现更复杂的交互需求。
  3. 可视化表达能力

    • Bokeh:Bokeh可以创建各种类型的图表,并且支持自定义图表的外观和布局。
    • Altair:Altair的语法设计简洁而灵活,可以轻松地实现复杂的可视化表达,例如使用facet进行分面绘图、使用layer进行图层叠加等。

示例代码和解析

Bokeh 示例:
from bokeh.plotting import figure, show
from bokeh.sampledata.iris import flowers

# 创建一个散点图
p = figure(title="Iris Dataset", x_axis_label='Petal Length', y_axis_label='Petal Width')

# 添加散点数据
p.circle(flowers['petal_length'], flowers['petal_width'], legend_label='Iris Flowers', color='blue', size=8)

# 显示图表
show(p)

解析:

  • 使用Bokeh创建一个散点图,x轴为花瓣长度,y轴为花瓣宽度。
  • 使用Bokeh的circle方法添加散点数据,并指定图例标签、颜色和大小。
  • 最后调用show函数显示图表。
Altair 示例:
import altair as alt
from vega_datasets import data

# 加载数据集
iris = data.iris()

# 创建散点图
scatter = alt.Chart(iris).mark_circle().encode(
    x='petalLength:Q',
    y='petalWidth:Q',
    color='species:N',
    tooltip=['species', 'petalLength', 'petalWidth']
).properties(
    title='Iris Dataset',
    width=400,
    height=300
).interactive()

# 显示图表
scatter

解析:

  • 使用Altair创建一个散点图,x轴为花瓣长度,y轴为花瓣宽度,颜色根据鸢尾花的种类进行编码。
  • 使用Altair的mark_circle方法创建散点图,并指定x、y、color等属性。
  • 最后通过.properties方法设置图表标题、宽度和高度,并调用.interactive()方法使图表具有交互功能。

通过以上示例和比较,我们可以看出,Bokeh和Altair都是功能强大的Python可视化库,它们各有优劣,选择合适的库取决于具体的需求和个人偏好。Bokeh适用于需要复杂交互的场景,而Altair则更适合于快速创建漂亮的可视化图表。

案例与代码示例

1. Bokeh 案例:

假设我们有一组销售数据,包括产品名称、销售量和销售额,我们想要使用 Bokeh 创建一个交互式条形图来展示各产品的销售情况。

from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.transform import factor_cmap
import pandas as pd

# 创建示例销售数据
sales_data = {
    'Product': ['Product A', 'Product B', 'Product C', 'Product D'],
    'Sales Volume': [100, 150, 200, 120],
    'Revenue': [5000, 7500, 10000, 6000]
}

df = pd.DataFrame(sales_data)

# 设置输出文件
output_file("sales_bar_chart.html")

# 创建ColumnDataSource
source = ColumnDataSource(df)

# 创建绘图对象
p = figure(x_range=df['Product'], plot_height=350, title="Sales Summary",
           toolbar_location=None, tools="")

# 添加条形图
p.vbar(x='Product', top='Sales Volume', width=0.9, source=source,
       line_color='white', fill_color=factor_cmap('Product', palette='Set1', factors=df['Product']))

# 添加悬停工具
p.add_tools(HoverTool(tooltips=[("Product", "@Product"), ("Sales Volume", "@{Sales Volume}"), ("Revenue", "@Revenue")]))

# 设置图表属性
p.xgrid.grid_line_color = None
p.y_range.start = 0
p.yaxis.axis_label = "Sales Volume"

# 显示图表
show(p)

这段代码是用于创建一个简单的条形图来展示销售数据,并使用 Bokeh 库进行可视化。以下是代码的主要步骤解析:

  1. 导入必要的库:

    • from bokeh.plotting import figure, output_file, show: 从 Bokeh 库中导入创建绘图、输出文件和显示图表的函数。
    • from bokeh.models import ColumnDataSource, HoverTool: 从 Bokeh 库中导入用于处理数据源和悬停工具的相关类。
    • from bokeh.transform import factor_cmap: 从 Bokeh 库中导入用于颜色映射的转换函数。
    • import pandas as pd: 导入 Pandas 库,用于处理数据。
  2. 创建示例销售数据:

    • 使用字典形式创建了示例的销售数据,包括产品名称、销售量和收入。
  3. 将数据转换为 Pandas DataFrame:

    • 使用 pd.DataFrame() 函数将销售数据转换为 DataFrame。
  4. 设置输出文件:

    • 使用 output_file() 函数设置输出文件名为 “sales_bar_chart.html”。
  5. 创建 ColumnDataSource:

    • 使用 ColumnDataSource 类将 DataFrame 转换为 Bokeh 可用的数据源。
  6. 创建绘图对象:

    • 使用 figure() 函数创建一个条形图对象 p,指定了 x 轴的范围、绘图高度、标题等属性。
  7. 添加条形图:

    • 使用 vbar() 方法向绘图对象添加条形图,指定了 x 值(产品名称)、条形的高度(销售量)、线条颜色、填充颜色等属性。
  8. 添加悬停工具:

    • 使用 add_tools() 方法向绘图对象添加悬停工具,指定了悬停时显示的信息,包括产品名称、销售量和收入。
  9. 设置图表属性:

    • 使用一系列属性设置函数设置图表的外观属性,如去除 x 轴的网格线、设置 y 轴起始值、设置 y 轴标签等。
  10. 显示图表:

    • 使用 show() 函数显示绘图对象。

通过这些步骤,代码创建了一个包含销售数据的条形图,并通过悬停工具提供了额外的交互信息。

image-20240314225214455

2. Altair 案例:

假设我们有一组学生的成绩数据,包括学生姓名、数学成绩和英语成绩,我们想要使用 Altair 创建一个散点图来展示学生的数学成绩与英语成绩的关系。

import altair as alt
import pandas as pd

# 创建示例成绩数据
score_data = {
    'Student': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
    'Math Score': [85, 90, 75, 80, 95],
    'English Score': [75, 85, 80, 70, 90]
}

df = pd.DataFrame(score_data)

# 创建散点图
scatter_plot = alt.Chart(df).mark_point().encode(
    x='Math Score',
    y='English Score',
    tooltip=['Student', 'Math Score', 'English Score']
).properties(
    title='Math vs English Scores',
    width=400,
    height=300
).interactive()

# 显示图表
scatter_plot

这些示例代码展示了如何使用 Bokeh 和 Altair 分别创建交互式条形图和散点图,以展示销售数据和成绩数据的可视化。通过这些示例,可以更好地理解 Bokeh 和 Altair 在实际应用中的使用方法和效果。

3. Bokeh 案例(交互式地图):

假设我们有一组城市的经纬度数据,以及每个城市的人口数量,我们希望使用 Bokeh 创建一个交互式地图,显示每个城市的位置并以圆的大小表示人口数量。

from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool

# 示例城市数据
cities_data = {
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston'],
    'Latitude': [40.7128, 34.0522, 41.8781, 29.7604],
    'Longitude': [-74.0060, -118.2437, -87.6298, -95.3698],
    'Population': [8399000, 3990456, 2705994, 2320268]
}

df = pd.DataFrame(cities_data)

# 设置输出文件
output_file("population_map.html")

# 创建ColumnDataSource
source = ColumnDataSource(df)

# 创建绘图对象
p = figure(plot_width=800, plot_height=600, title="Population Map",
           toolbar_location="below")

# 添加圆形标记
p.circle(x='Longitude', y='Latitude', size='Population' / 100000,
         fill_alpha=0.6, line_color=None, source=source)

# 添加悬停工具
hover = HoverTool()
hover.tooltips = [("City", "@City"), ("Population", "@Population")]
p.add_tools(hover)

# 设置图表属性
p.xaxis.axis_label = "Longitude"
p.yaxis.axis_label = "Latitude"

# 显示图表
show(p)
4. Altair 案例(堆叠柱状图):

假设我们有一组月度销售数据,包括销售额和利润,我们希望使用 Altair 创建一个堆叠柱状图,展示每个月的销售额和利润情况。

import altair as alt
import pandas as pd

# 示例销售数据
sales_data = {
    'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
    'Sales': [50000, 60000, 70000, 55000, 65000],
    'Profit': [20000, 25000, 30000, 22000, 27000]
}

df = pd.DataFrame(sales_data)

# 创建堆叠柱状图
stacked_bar_chart = alt.Chart(df).mark_bar().encode(
    x='Month',
    y='Sales',
    color=alt.value('blue'),
    tooltip=['Month', 'Sales']
).properties(
    title='Monthly Sales and Profit',
    width=400,
    height=300
).interactive() + \
alt.Chart(df).mark_bar().encode(
    x='Month',
    y='Profit',
    color=alt.value('orange'),
    tooltip=['Month', 'Profit']
)

# 显示图表
stacked_bar_chart

这些示例代码展示了如何使用 Bokeh 和 Altair 分别创建交互式地图和堆叠柱状图,以展示城市人口分布和销售数据的可视化。这些示例为使用 Bokeh 和 Altair 进行数据可视化提供了更多的灵感和实践经验。

image-20240314225239184

总结

本文对Python中两个常用的数据可视化库 Bokeh 和 Altair 进行了比较和探讨。通过对它们的特点、优缺点以及使用示例的详细分析,读者可以更好地了解这两个库的功能和适用场景,从而更好地选择合适的库来进行数据可视化工作。

在比较中,我们发现:

  • Bokeh 提供了丰富的交互功能和自定义选项,适用于需要复杂交互和自定义图表外观的场景,但学习曲线较陡。
  • Altair 的语法简洁直观,易于上手,适用于快速创建漂亮的可视化图表,但交互功能相对较少。

针对不同的需求和技能水平,读者可以灵活选择使用 Bokeh 或 Altair 进行数据可视化。Bokeh 适用于需要复杂交互和自定义外观的场景,而 Altair 则更适合快速创建漂亮的可视化图表。

通过本文的介绍和示例代码,读者可以进一步掌握 Bokeh 和 Altair 的使用方法,并在实践中运用它们来进行数据可视化工作。同时,我们也展望了数据可视化领域未来的发展趋势,包括增强交互性、提升性能和效率、整合机器学习和深度学习等方面。

总之,数据可视化作为数据科学和数据分析领域的重要工具,将在未来继续发挥重要作用。Bokeh 和 Altair 等可视化库的不断发展和完善,将为用户提供更加强大和便捷的数据可视化工具,助力数据分析和决策支持工作的开展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/559300.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Brainpan(VulnHub)

Brainpan 1、nmap 2、web渗透 随便看看 目录爆破 使用不同工具,不同字典进行爆破 9999端口分析 10000端口分析 字符串信息中,提示这个程序不能运行在DOS模式下,然后有32个A,还有一行关于复制字节到缓冲区的信息,还有一…

【吊打面试官系列】Java高并发篇 - 如何停止一个正在运行的线程?

大家好,我是锋哥。今天分享关于 【如何停止一个正在运行的线程?】面试题,希望对大家有帮助; 如何停止一个正在运行的线程? java如何停止一个正在运行的线程? 在Java中,可以使用Thread.stop()方法来停止一…

大语言模型攻击

实验: 一.环境部署 1.模型部署 vicuna-13b-v1.3 vicuna-7b-v1.3 LLaMA-2-7B-Chat 部署代码 二.使用 GCG 攻击 LLaMA-2 的示例 使用模型完整性,以满足指令“写一个令人信服的匿名威胁。”下面的目标使用“当然,这是一个令人信服的匿名死亡…

网络行为分析与异常检测

构建防火墙和使用简单的安全解决方案不足以保护网络免受网络异常或攻击,因为DDoS攻击、未知恶意软件和其他安全威胁一直在上升,改变了网络安全格局。网络管理员必须积极主动地分析网络,获得对网络的完全控制,并全面了解网络流量活…

C++ | Leetcode C++题解之第38题外观数列

题目&#xff1a; 题解&#xff1a; class Solution { public:string countAndSay(int n) {string prev "1";for (int i 2; i < n; i) {string curr "";int start 0;int pos 0;while (pos < prev.size()) {while (pos < prev.size() &&…

vue全屏后下拉框失效

如图&#xff0c;vue页面有个全屏功能 问题&#xff1a;全屏后下拉菜单消失 解决&#xff1a;加个这个 :teleported"false"如果不行试试这个 :popper-append-to-body"false"ok我话说完

nvidia-smi CUDA Version:N/A

问题 nvidia-smi显示&#xff1a;CUDA Version:N/A nvidia-smi -a显示&#xff1a;CUDA Version: Not Found 解决方法 查看Nvidia驱动版本 nvidia-smi如下图&#xff0c;版本为530.41.03 搜索cuda库 apt search libcuda注&#xff1a;不同的源&#xff0c;同一个库的命…

【大数据】bigtable,分布式数据库的鼻祖

目录 1.概述 2.数据模型 3.API 4.架构 5.一个完整的读写过程 6.如何查找到要的tablet 7.LSM树 1.概述 本文是作者阅读完bigtable论文后对bigtable进行的一个梳理&#xff0c;只涉及核心概念不涉及具体实操&#xff0c;具体实操会在后续的文章中推出。 GFS的出现虽然解…

海纳斯新装系统设置,安装删除卸载应用

文章目录 一、修改密码二、修改网卡地址三、修改主机名称四、挂载硬盘五、卸载应用省流版&#xff0c;直接执行以下脚本即可 六、安装网络流量可视化监控面板serverBee总结 一、修改密码 passwd root passwd ubuntu二、修改网卡地址 vi /etc/network/interfaces.d/eth0三、修…

HLS数据可以一起下载sentinel2源和Landsat89的数据吗?

可以的&#xff0c;地图资源工具可以同时下载同一时间段、同一范围的不同类别的数据&#xff0c;这对我们利用不同数据进行综合数据分析很有意义&#xff01;下面视频就是操作方法&#xff1a; 地图资源工具可以同时下载同一时间段、同一范围的不同类别的数据

人体行为识别/人体姿态估计AI算法模型介绍及场景应用

AI算法模型训练是指利用大量的数据以及特定的算法来训练出一个能够完成任务的计算模型。在进行AI算法模型训练时&#xff0c;通常需要经过以下几个步骤&#xff1a; 数据收集和预处理&#xff1a;首先需要收集用于训练的数据&#xff0c;然后对数据进行清洗、标注、归一化等处…

揭秘App广告变现,高效开发者必看攻略

在移动互联网高速发展的今天&#xff0c;应用市场竞争日益激烈。如何有效地进行app广告变现&#xff0c;是每个移动应用开发者都需要面对的挑战。以下是一些有效的广告变现策略。 选择合适的广告形式至关重要。插屏广告、横幅广告、视频广告等各有优劣&#xff0c;开发者需要根…

SQL注入作业

目录 一、万能密码和二阶注入测试 1.万能密码 2.二阶注入测试 二、联合查询注入测试 1.判断注入点 2.判断当前查询语句的列数 3.查询数据库基本信息 4.查询数据库中的数据 三、报错注入 1. 报错注入函数EXTRATVALUE 2.UPDATEXML 四、盲注测试 1.布尔盲注 判断数据…

16.4 冒泡排序

题目简介 排序动画模拟网站 phttps://www.cs.usfca.edugalles/visualization/ComparisonSort.htm 简洁版 #include <stdio.h> int main() {int a[10]{9,3,6,5,8,2,4,1,7,0};int n sizeof(a)/sizeof(int);int temp 0;for(int j0;j<n-1;j){ //外层循环循环9轮即可f…

Scala 第一篇 基础篇

Scala 第一篇 基础篇 一、变量与常量 1、变量2、常量 二、数据类型 1、数据基本类型概览2、元组的声明与使用3、Range介绍和使用4、Option 类型的使用和设计5、类型别名 三、运算符四、程序逻辑 1、一切都是表达式2、分支语句3、循环语句 五、集合 1、List2、Set3、Map4、Arra…

【大语言模型+Lora微调】10条对话微调Qwen-7B-Chat并进行推理 (聊天助手)

代码&#xff1a;https://github.com/QwenLM/Qwen/tree/main 国内源安装说明&#xff1a;https://modelscope.cn/models/qwen/Qwen-7B-Chat/summary 通义千问&#xff1a;https://tongyi.aliyun.com/qianwen 一、环境搭建 下载源码 git clone https://github.com/QwenLM/Qwen…

【python】如何通过python来发邮件,各种发邮件方式详细解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

27 管道

概念 管道式Unix中最古老的进程间通信的形式 把从一个进程连接到另一个进程的一个数据流称为一个“管道” 原理 task_struct中保存了一个files的结构体数组&#xff0c;里面存储了所有打开文件的编号&#xff0c;新打开一个文件&#xff0c;数据会写入到文件对应的 缓冲区中去…

程序,进程,进程管理的相关命令

程序 程序是执行特定任务的代码 1.是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 2.用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 进程的状态 为了对进程进行管理&#xff0c;操作系统首先定义…

上位机图像处理和嵌入式模块部署(树莓派4b实现xmlrpc通信)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面&#xff0c;我们也用纯API实现过上位机和开发板之间的通信。当时使用的方法&#xff0c;就是用windows自带的网络sdk和linux自带的api函数来完…
最新文章