Python中怎么利用Altair实现数据制图
这篇文章给大家介绍Python中怎么利用Altair实现数据制图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
创新互联是一家集网站建设,鹤山企业网站建设,鹤山品牌网站建设,网站定制,鹤山网站建设报价,网络营销,网络优化,鹤山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
绘图流程
我通过绘制同一个多柱状图比较了多个 Python 绘图库的差异。正式开始之前,你需要将你的 Python 环境调整到能运行下面代码的状态。具体就是:
安装最新版的 Python( Linux、Mac 和 Windows 系统下的安装方法)
确认该版本 Python 可以运行本教程所使用的库
演示用数据可从网络下载,并且可以用 pandas 直接导入:
import pandas as pddf = 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 所用数据的组织形式是每个变量一列(即 数据列 )。这种方式下可以将每个变量映射到图的一个属性上 —— Altair 称之为“通道”。在上例中,我们期望每个 “党派” 在 x
轴上显示为一组图柱, 其 “席位” 显示在 y
轴,且将图柱按照 “年份” 分开为 “列”。我们还想根据 “党派” 给图柱使用不同的 “颜色”。用语言表述需求的话就是上面这个样子,而这也正是代码所要表述的!
现在把图画出来:
Altair plot with default styling
调整样式
这和我们期待的效果有点接近了。与 Matplotlib 方案相比,主要区别在于 Altair 方案中,每个 year
组显示的时候,内部之间都有个小空白 —— 这不是问题,这只是 Altair 多柱状图显示的一个特性。
所以说呢,还需要对显示样式再做一些改进。
非整形数据
两个不是整数的年份名称(Feb 1974
和 Oct 1974
)显示为 NaN
了。这可以通过将年份数值 year
转换为字符串来解决:
df['year'] = df['year'].astype(str)
指定数据排序方法
还需要让 Altair 知道如何对数据进行排序。Altair 允许通过传给它一个 Column
对象,来设定 Column
通道的更多细节。现在让 Altair 按照数据在数据集中出现的顺序排列:
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 效果图:
关于Python中怎么利用Altair实现数据制图就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
标题名称:Python中怎么利用Altair实现数据制图
文章URL:http://azwzsj.com/article/popeci.html