本文分享自华为云社区《探求数据可视化:Bokeh vs. Altair》,作者:柠檬味拥抱。
在数据科学和数据剖析范畴,数据可视化是一种强壮的东西,能够协助咱们更好地了解数据、发现形式和趋势。Python作为一种盛行的数据科学东西,拥有多种数据可视化库。本文将重点比较Bokeh和Altair这两个常用的Python数据可视化库,讨论它们的优缺点以及在不同场景下的适用性。
Bokeh 简介
Bokeh是一个交互式可视化库,它能够创立各种类型的交互式图表,包含散点图、线图、条形图等。Bokeh供给了丰富的东西,运用户能够在图表中进行缩放、平移和挑选等操作。
Altair 简介
Altair是一个基于Vega和Vega-Lite的声明式统计可视化库。它的规划理念是简略性和一致性,运用者只需经过简略的Python语法即可创立杂乱的可视化图表,而无需深入了解底层的绘图细节。
Bokeh 与 Altair 的比较
-
易用性:
- Bokeh:相对而言,Bokeh的学习曲线较为峻峭,需求必定的时间来掌握其强壮的交互功用和绘图选项。
- Altair:Altair的语法相对简略直观,运用者能够更快速地创立出美丽的图表,对于新手来说更易上手。
-
交互性:
- Bokeh:Bokeh供给了丰富的交互东西,能够轻松地创立交互式图表,而且支撑自定义交互行为。
- Altair:尽管Altair的交互功用相对较少,但是它能够无缝地与其他交互库(如Panel)集成,完成更杂乱的交互需求。
-
可视化表达能力:
- 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 库进行可视化。以下是代码的首要过程解析:
-
导入必要的库:
-
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 库,用于处理数据。
-
-
创立示例出售数据:
- 运用字典形式创立了示例的出售数据,包含产品名称、出售量和收入。
-
将数据转换为 Pandas DataFrame:
- 运用
pd.DataFrame()
函数将出售数据转换为 DataFrame。
- 运用
-
设置输出文件:
- 运用
output_file()
函数设置输出文件名为 “sales_bar_chart.html”。
- 运用
-
创立 ColumnDataSource:
- 运用
ColumnDataSource
类将 DataFrame 转换为 Bokeh 可用的数据源。
- 运用
-
创立绘图目标:
- 运用
figure()
函数创立一个条形图目标p
,指定了 x 轴的范围、绘图高度、标题等特色。
- 运用
-
增加条形图:
- 运用
vbar()
办法向绘图目标增加条形图,指定了 x 值(产品名称)、条形的高度(出售量)、线条色彩、填充色彩等特色。
- 运用
-
增加悬停东西:
- 运用
add_tools()
办法向绘图目标增加悬停东西,指定了悬停时显现的信息,包含产品名称、出售量和收入。
- 运用
-
设置图表特色:
- 运用一系列特色设置函数设置图表的外观特色,如去除 x 轴的网格线、设置 y 轴起始值、设置 y 轴标签等。
-
显现图表:
- 运用
show()
函数显现绘图目标。
- 运用
经过这些过程,代码创立了一个包含出售数据的条形图,并经过悬停东西供给了额定的交互信息。
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 等可视化库的不断发展和完善,将为用户供给更加强壮和便捷的数据可视化东西,助力数据剖析和决议计划支撑作业的展开。