丢弃传统可视化库!事实已证明,它更牛啊!

Python学习与数据挖掘

共 3721字,需浏览 8分钟

 · 2020-11-30

关于 Python 可视化的方法,在之前文章中已多次讲解。感兴趣的同学可以查看上方话题:「Python可视化」

今天我给大家分享的一个Python可视化库:「Altair」,这绝对是一款可以媲美 Pyechart、Plotly 的工具,下面给大家详细介绍。

Altair 简介

Altair 是一个开源 python 库,用于声明性统计可视化,基于 Vega 和 Vega-Lite。

Altair 提供了一个高效简洁的可视化语法,使我们能够快速构建各种统计可视化。我们可以通过构建优雅而有效的绘图来给更多时间来探索数据,而不仅仅是把更多的时间进行coding。

Altair 安装方法

可以使用以下方法安装 Altair 以及vega_datasets数据:

pip install altair vega_datasets

如果使用conda 包管理器,也可以这样:

conda install -c conda-forge altair vega_datasets

Altair 使用

1、交互式图表

构建一个交互式图表,使用的数据为「天气数据」,需要获取数据可以「文末获取」。制作可视化图表非常容易,我在下方给出完整代码,说明部分可以看代码备注。

import altair as alt
import pandas as pd
settle_data = pd.read_csv("seattle-weather.csv")  # 导入数据集,数据见文末
settle_data.weather.unique()  # 定义比例:根据天气类型的分布来绘制数据
scale = alt.Scale(domain=['sun''fog''drizzle''rain''snow'],
                  range=['#e7ba52''#a7a7a7''#aec7e8''#1f77b4''#9467bd'])
color = alt.Color('weather:N', scale=scale)
brush = alt.selection_interval(encodings=['x'])  #添加互动功能
click = alt.selection_multi(encodings=['color'])
#顶部散射图:温度 Vs 日期
points = alt.Chart().mark_point().encode(
    alt.X('monthdate(date):T', title='Date'),
    alt.Y('temp_max:Q',
        title='Maximum Daily Temperature (C)',
        scale=alt.Scale(domain=[-540])
    ),
    color=alt.condition(brush, color, alt.value('lightgray')),
    size=alt.Size('precipitation:Q', scale=alt.Scale(range=[5200]))
).properties(
    width=550,
    height=300
).add_selection(
    brush
).transform_filter(
    click
)
##########################
# 2. 底部栏图:天气类型
bars = alt.Chart().mark_bar().encode(
    x='count()',
    y='weather:N',
    color=alt.condition(click, color, alt.value('lightgray')),
).transform_filter(
    brush
).properties(
    width=550,
).add_selection(
    click
)
##########################
#3. 构建复合图:垂直串联两个图表
alt.vconcat(
    points,
    bars,
    data=settle_data,
    title="天气数据: 2012-2015"
)

效果展示

2、条形图

此示例显示具有正值和负值的条形图

import altair as alt
from vega_datasets import data

source = data.us_employment()

alt.Chart(source).mark_bar().encode(
    x="month:T",
    y="nonfarm_change:Q",
    color=alt.condition(
        alt.datum.nonfarm_change > 0,
        alt.value("steelblue"),  # The positive color
        alt.value("orange")  # The negative color
    )
).properties(width=600)

效果展示

效果图

3、折线图

import altair as alt
from vega_datasets import data

source = data.stocks()

base = alt.Chart(source).properties(width=550)

line = base.mark_line().encode(
    x='date',
    y='price',
    color='symbol'
)

rule = base.mark_rule().encode(
    y='average(price)',
    color='symbol',
    size=alt.value(2)
)

line + rule

效果展示

4、散点图

import altair as alt
import pandas as pd
import numpy as np

np.random.seed(1)

source = pd.DataFrame({
    'x': np.arange(100),
    'A': np.random.randn(100).cumsum(),
    'B': np.random.randn(100).cumsum(),
    'C': np.random.randn(100).cumsum(),
})

base = alt.Chart(source).mark_circle(opacity=0.5).transform_fold(
    fold=['A''B''C'],
    as_=['category''y']
).encode(
    alt.X('x:Q'),
    alt.Y('y:Q'),
    alt.Color('category:N')
)

base + base.transform_loess('x''y', groupby=['category']).mark_line(size=4)

效果展示

4、面积图

import altair as alt
from vega_datasets import data

source = data.iris()

alt.Chart(source).transform_fold(
    ['petalWidth',
     'petalLength',
     'sepalWidth',
     'sepalLength'],
    as_ = ['Measurement_type''value']
).transform_density(
    density='value',
    bandwidth=0.3,
    groupby=['Measurement_type'],
    extent= [0, 8],
    counts = True,
    steps=200
).mark_area().encode(
    alt.X('value:Q'),
    alt.Y('density:Q', stack='zero'),
    alt.Color('Measurement_type:N')
).properties(width=400, height=100)

效果展示

效果图

总结

Altair 是一款非常优秀的可视化库,它可以画的图形非常多,并且具有高效简洁的语法,是时候舍弃一些传统的可视化库了!你有兴趣可以尝试一下!

数据领取方式:


长按扫码,发消息 [天气]


浏览 60
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报