altair 8800_使用Altair在Python中进行简明数据绘图

altair 8800

Python中可用的绘图库提供了多种根据您的喜好显示数据的方法,无论您是灵活性,设计,易用性还是特定样式。

Altair中的绘图提供了与其他解决方案不同的解决方案,我发现这比绘制完成的比例更简单。 感谢Vega (声明性绘图语言),它具有一个优雅的界面,该语言使您可以定义绘图的外观,而不用编写循环和条件语句来构造它们。

流利的绘图

我通过绘制相同的多栏图来比较每个Python绘图库。 在继续之前,请注意,您可能需要调整Python环境以使此代码运行,包括以下内容。

  • 安装最新版本的Python( LinuxMacWindows的说明
  • 验证Python版本是否与本教程中使用的库兼容

数据可在线获得,并可使用熊猫导入:


   
   
import pandas as pd
df = pd. read_csv ( 'https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv' )

现在我们准备出发了。 作为比较,这是我们在Matplotlib中绘制的图:

Matplotlib UK election results

Matplotlib图需要16行代码来创建,包括手动计算每个条的位置。

这是在Altair中进行类似绘制的方法:


   
   
    import altair as alt

    chart = alt. Chart ( df ) . mark_bar ( ) . encode (
        x = 'party' ,
        y = 'seats' ,
        column = 'year' ,
        color = 'party' ,
    )

    chart. save ( 'altair-elections.html' )

更简洁! 与Seaborn一样,Altair处理的数据每个变量只有一列( Long Form )。 这使您可以将每个变量映射到绘图的某个方面,Altair称这些方面为“通道”。 在我们的示例中,我们希望每个partyx轴上有一个小节,我们希望每个方在y轴上获胜的seats ,并且希望将这些小节按year分组到s column 。 我们也想按partycolor 。 这就是您用语言描述它的方式,而这正是代码中所说的!

这是情节的样子:

Altair plot with default styling

调整样式

year组显示在中间,中间有一点空白-这只是Altair多栏图的一个功能,这不是问题。

但是,我们确实要进行其他一些小的样式改进。

非整数值

两个非整数年份名称( Feb 1974Oct 1974 Feb 1974 Oct 1974 )显示为NaN 。 我们可以通过将year值转换为字符串来解决这些问题:

     df [ 'year' ] = df [ 'year' ] . astype ( str ) 

指定排序顺序

然后,我们还需要告诉Altair如何对数据进行排序。 Altair允许我们通过向其传递Column对象来指定有关column通道的更多详细信息。 因此,我们告诉它按照数据在DataFrame中出现的顺序进行排序:


   
   
    chart = alt. Chart ( df ) . mark_bar ( ) . encode (
        # ...
        column = alt. Column ( 'year' , sort = list ( df [ 'year' ] ) , title = None ) ,
        # ...
    )

删除轴标题

我们通过设置title=None从图的顶部删除了“ year”标签。 我们还从每个列中删除“ party”标签:


   
   
    chart = alt. Chart ( df ) . mark_bar ( ) . encode (
        x = alt. X ( 'party' , title = None ) ,
        # ...
    )

指定色彩图

最后,我们要指定自己的颜色以用于条形图。 Altair使我们可以指定domain值和range颜色之间的映射,这正是我们所需要的:


   
   
    cmap = {
        'Conservative' : '#0343df' ,
        'Labour' : '#e50000' ,
        'Liberal' : '#ffff14' ,
        'Others' : '#929591' ,
    }

    chart = alt. Chart ( df ) . mark_bar ( ) . encode (
        # ...
        color = alt. Color ( 'party' , scale = alt. Scale ( domain = list ( cmap. keys ( ) ) , range = list ( cmap. values ( ) ) ) )
    )

带有样式调整的最终代码

在应用了这些样式调整之后,我们的代码看起来就不那么令人愉快了,但是它仍然使用使Altair如此可伸缩的声明性方法。 我们仍然将数据中的自变量分配给绘图的各个方面,而不是像在Matplotlib中通常需要执行的那样执行复杂的数据操作。 唯一的区别是,变量名现在被包裹在alt.X()这样的对象中,这些对象使我们可以调整它们的显示方式:


   
   
    import altair as alt
    from votes import long as df

    cmap = {
        'Conservative' : '#0343df' ,
        'Labour' : '#e50000' ,
        'Liberal' : '#ffff14' ,
        'Others' : '#929591' ,
    }

    df [ 'year' ] = df [ 'year' ] . astype ( str )

    # We're still assigning, e.g. 'party' to x, but now we've wrapped it
    # in alt.X in order to specify its styling
    chart = alt. Chart ( df ) . mark_bar ( ) . encode (
        x = alt. X ( 'party' , title = None ) ,
        y = 'seats' ,
        column = alt. Column ( 'year' , sort = list ( df [ 'year' ] ) , title = None ) ,
        color = alt. Color ( 'party' , scale = alt. Scale ( domain = list ( cmap. keys ( ) ) , range = list ( cmap. values ( ) ) ) )
    )

    chart. save ( 'altair-elections.html' )

公平地说,与Matplotlib一样,我们现在达到的代码行数(16)与此处使用的相同!

这是应用了样式调整的Altair图:

The Altair plot with our custom styling

结论  

尽管使用Altair进行绘图所需的代码量与其他库相似,但其声明性绘图语言增加了一层我已逐渐意识到的复杂性。 Altair还提供了一种完全独立的方法来调整和调整样式,从而使该语法不受用于绘图的代码块的影响。 考虑使用Python的绘图解决方案时,Altair是另一个很棒的库。 您可以在Anvil (使用帐户) 上交互式运行此代码,也可以使用此开源运行时本地运行

---

本文基于Anvil博客上Altair中的 P 抽签,并经允许重复使用。

翻译自: https://opensource.com/article/20/6/altair-python

altair 8800

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值