许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Altair 8800:使用Altair在Python中进行简洁数据绘图

Altair 8800:使用Altair在Python中进行简洁数据绘图

阅读数 2
点赞 0
article_banner

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


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空