使用Altair实现Python交互式数据可视化

今天给大家介绍一个基于python的交互式数据可视化组件:Altair,Altair是基于VegaVega-Lite的Python声明式统计可视化库。

Altair提供了强大而简洁的可视化语法,使您可以快速构建各种统计可视化。只需要短短十几行代码就可以创建丰富多彩的交互的可视化统计图报表:

这里你只需要指定数据列以及颜色的编码比如指定图表的x轴、y轴所对应的数据列及数据点的颜色编码,其余的绘图工作Altair会自动帮你完成。下面是的截图是官方文档中提供的一些例子:

安装

Altair组件的安装非常简单,官方文档中给出了两种安装方式:

安装完成以后,您应该可以打开Jupyter Notebook或JupyterLab并执行示例库中的任何代码。

Altair 图表简介

官方文档中有对Altair的使用方法做了详细介绍,这里我们只做一些基本功能的介绍,通过基本功能的介绍你可以从无到有实现一个完整的交互式图表的开发。

数据

官方的例子中使用了一些内置的示例数据,这些内置数据都封装在vega_datasets包中,我们可以在安装Altair的同时一起安装Vega_datasets包。除了内置数据意外,我们仍然可以使用外部的数据如dataframe中的数据以及外部csv格式的数据等等。

下面我们首相使用pandas包来手工创建一些数据,然后让Altair利用这些数据来创建交互式图表:

import altair as alt
import pandas as pd
data = pd.DataFrame({'col-1': list('CCCDDDEEE'),
                     'col-2': [2, 7, 4, 1, 2, 6, 8, 4, 7]})
data

Marks方法

创建完数据以后,需要选择各种图表,例如条形图,折线图,面积图,散点图,直方图和地图等。 mark属性是指定使用那些图表。 Altair提供了许多基本Marks属性:

除了这些基本图表以为,Altair还提供了一些复合图表:

下面我们将使用mark_point()的encode()方法来绘制散点图,此时并没有交互效果:

alt.Chart(data).mark_point().encode(
    x='col-1',
    y='col-2'
)

Encoding属性

Altair提供了许多在不同情况下有用的encode()属性。 下面是官方文档对它们的总结:

 

交互效果的实现

除基本图表外,Altair的独特功能之一是用户可以与图表进行交互,包括平移,缩放和选择数据范围等功能。我们可以仅通过调用interact()方法来实现平移和缩放。 例如我们可以这样做:

alt.Chart(data).mark_point().encode(
    x='col-1',
    y='col-2'
).interactive()

Altair还提供了用于创建交互式图像区域选择API:selection() , 在selection函数中,我们可以使一些更酷的高级函数,例如本文开头显示的GIF动画中自动生成选中的数据点的直方图。

实现酷炫的交互可视化

了解Altair的基本知识之后,我们来制作一个交互式图表。在本文中,我们将使用vega_datasets示例数据集中的汽车数据,

from vega_datasets import data
cars = data.cars()
cars

首先,我们将使用selection_interval()函数来创建一个区间选择工具brush:

brush = alt.selection_interval()

接下来,我们可以通过设置selection属性将该brush绑定到图表:

alt.Chart(cars).mark_point().encode(
    x='Miles_per_Gallon:Q',
    y='Horsepower:Q',
    color='Origin:N'
).add_selection(
    brush
)

 上面的代码是一个图表,可让单击鼠标左键不放并拖动鼠标便可以创建选择区域,接着可以用鼠标移动选择区域,如果想关闭选择区域用鼠标双击选择区域就可以了。

 这里我们还可以使用condition条件来颜色,我们想要让被选择区之外的点都变成灰色,在选择区域内的点都高亮显示,我们可以这样做:

alt.Chart(cars).mark_point().encode(
    x='Miles_per_Gallon:Q',
    y='Horsepower:Q',
    color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
).add_selection(
    brush
)

 

 接下来我们我们绘制一个柱状图,最后我们要让先前的散点图与该柱状图进行联动:

alt.Chart(cars).mark_bar().encode(
    y='Origin:N',
    color='Origin:N',
    x='count(Origin):Q'
)

为了将柱状图与之前的散点图相关联,我们需要使用transform_filter()并传递brash。最后我们使用 “&”来关联散点图和柱状图: 

points = alt.Chart(cars).mark_point().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q',
    color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
).add_selection(
    brush
)
bars = alt.Chart(cars).mark_bar().encode(
    y='Origin:N',
    color='Origin:N',
    x='count(Origin):Q'
).transform_filter(
    brush
)
points & bars

 以下是本文的完整代码:

import altair as alt
from vega_datasets import data

cars = data.cars()

brush = alt.selection_interval()

points = alt.Chart(cars).mark_point().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q',
    color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
).add_selection(
    brush
)

bars = alt.Chart(cars).mark_bar().encode(
    y='Origin:N',
    color='Origin:N',
    x='count(Origin):Q'
).transform_filter(
    brush
)

points & bars

本文是一个入门教程,主要向所有人展示这个出色的数据可视化库。 如果想仔细研究Altair,您必须查看文档,源代码,与研究相关的示例,然后才能将其应用于实践中。

猜你喜欢

转载自blog.csdn.net/weixin_42608414/article/details/106342246
今日推荐