本文分享自华为云社区《探求数据可视化:Bokeh vs. 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()函数显现绘图目标。

经过这些过程,代码创立了一个包含出售数据的条形图,并经过悬停东西供给了额定的交互信息。

Python中2种常用数据可视化库:Bokeh和Altair

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 进行数据可视化供给了更多的创意和实践经验。

总结

本文对Python中两个常用的数据可视化库 Bokeh 和 Altair 进行了比较和讨论。经过对它们的特色、优缺点以及运用示例的详细剖析,读者能够更好地了解这两个库的功用和适用场景,然后更好地挑选合适的库来进行数据可视化作业。

在比较中,咱们发现:

  • Bokeh 供给了丰富的交互功用和自定义选项,适用于需求杂乱交互和自定义图表外观的场景,但学习曲线较陡。
  • Altair 的语法简练直观,易于上手,适用于快速创立美丽的可视化图表,但交互功用相对较少。

针对不同的需求和技能水平,读者能够灵活挑选运用 Bokeh 或 Altair 进行数据可视化。Bokeh 适用于需求杂乱交互和自定义外观的场景,而 Altair 则更适合快速创立美丽的可视化图表。

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

总之,数据可视化作为数据科学和数据剖析范畴的重要东西,将在未来继续发挥重要作用。Bokeh 和 Altair 等可视化库的不断发展和完善,将为用户供给更加强壮和便捷的数据可视化东西,助力数据剖析和决议计划支撑作业的展开。