本文再分享一个python交互式可视化工具altair,altair的底层是Vega-lite (基于一种简洁的交互式可视化语法,A Grammar of Interactive Graphics),效果例如:altair的作者为Jake Vanderplas,是一个大佬,之前是华盛顿大学 eScIEnce 学院物理科学研究院院长,现为Google的Software Engineer,热衷于Python, Astronomy和Data ScIEnce;同时是一位活跃的开源爱好者,历年的 PyData会议都能见到他的talk,除了altair外,为Scikit-Learn、Scipy、 Matplotlib、IPython 等著名 Python 程序库做了大量贡献;著有两本高stars书籍Python Data Science Handbook 和A Whirlwind Tour of Python 。之前介绍的python交互式工具还有pygal,cufflinks。目录
1、Altair基础图形快速入门
pip安装altair
Altair一步一步绘图
python的Altair脚本转化为JSON
2、Altair复杂图形快速入门
configure_*()方法个性化图像属性
selection、condition、binding使得altair图形能和鼠标更好交互
Layer, HConcat, VConcat, Repeat, Facet助力altair轻松构建复合图形
Chart.resolve_scale(), Chart.resolve_axis(), and Chart.resolve_legend()个性化复合图形
3、基于Altair的demo分享
官网关于天气的一个案例
官网:https://altair-viz.github.io/index.html
1、altair基础图形快速入门
这个小结介绍如何快速的绘制常见的基础图,如“bar”, “circle”, “square”, “tick”,“line”, * “area”, “point”, “rule”, “geoshape”, and “text”等。
pip安装altairpip install altair vega_datasets -i https://pypi.tuna.tsinghua.edu.cn/simple#国内源加速安装
altair一步一步绘图 数据准备
依旧使用鸢尾花iris数据集,数据集介绍见:Python可视化|matplotlib10-绘制散点图scatter
import seaborn as snspd_iris = sns.load_dataset("iris")pd_iris.head(n=5)
快速绘图
#快速绘图import altair as altimport pandas as pdalt.Chart(pd_iris).mark_point().encode(x='sepal_length', y='sepal_wIDth', color='specIEs')
绘图步骤拆分
由alt.Chart(pd_iris).mark_point().encode(x='sepal_length',y='sepal_wIDth',color='specIEs')这段代码可知,altair绘图主要用到Chart()方法、mark_*()方法、和encode()方法。
Chart()方法将数据转化为altair.vegalite.v4.API.Chart对象
括号内可设置图像的高度、宽度、背景色等等,详细见:https://altair-viz.github.io/user_guide/generated/toplevel/altair.Chart.html?highlight=chart
mark_*()方法指定要展示的图形,例如绘制散点图mark_point()
mark_*()方法设置图形属性,如颜色color、大小size等
括号内可设置待展示图形的各种属性,以mark_point()设置点颜色为例如下。
其它详细参数见:https://altair-viz.github.io/user_guide/generated/toplevel/altair.Chart.html?highlight=mark_point#altair.Chart.mark_point
encode()方法设置坐标轴的映射
详细参数:https://altair-viz.github.io/user_guide/generated/toplevel/altair.Chart.html?highlight=encode#altair.Chart.encode
python的altair脚本转化为JsONpython脚本
import altair as altimport pandas as pddata = pd.DataFrame({'x': ['A', 'B', 'C', 'D'], 'y': [1, 2, 1, 2]})alt.Chart(data).mark_bar().encode( x='x', y='y',)
Json脚本点击即可获取
{ "config": {"vIEw": {"continuousWIDth": 400, "continuousHeight": 300}}, "data": {"name": "data-39e740acccd9d827d4364cdbd6d37176"}, "mark": "bar", "enCoding": { "x": {"type": "nominal", "fIEld": "x"}, "y": {"type": "quantitative", "fIEld": "y"} }, "$schema": "https://vega.github.io/schema/vega-lite/v4.8.1.Json", "datasets": { "data-39e740acccd9d827d4364cdbd6d37176": [ {"x": "A", "y": 1}, {"x": "B", "y": 2}, {"x": "C", "y": 1}, {"x": "D", "y": 2} ] }}
2、altair复杂图形快速入门
这一节简单介绍更复杂的图形,如个性化分面图标题、图例、会用到configure_*()方法、selection()方法、condition()方法、
binding_*()方法、
configure_header()方法个性化header
import altair as altfrom vega_datasets import data#vega_datasets为altair的一个内置数据集模块source = data.cars.urlchart = alt.Chart(source).mark_point().encode(x='Horsepower:Q', y='Miles_per_gallon:Q', color='Origin:N', column='Origin:N').propertIEs( wIDth=180, height=180)chart.configure_header(Titlecolor='green', TitleFontSize=14, labelcolor='red', labelFontSize=14)
configure_legend()方法个性化图例
import altair as altfrom vega_datasets import datasource = data.cars.urlchart = alt.Chart(source).mark_point().encode(x='Horsepower:Q', y='Miles_per_gallon:Q', color='Origin:N')chart.configure_legend(strokecolor='gray', fillcolor='#EEEEEE', padding=10, cornerRadius=10, orIEnt='top-right')
更多configure类方法介绍见:https://altair-viz.github.io/user_guide/configuration.html
selection、condition、binding使得altair图形能和鼠标更好交互这里主要用到selection()、condition()、binding()方法,简单介绍,详细见:https://altair-viz.github.io/user_guide/interactions.html
selection()方法
鼠标可以轻捕捉图形某一部分。
condition()方法
让鼠标捕捉的部分高亮,未捕捉的部分暗淡。
binding_*()方法
效果如下:
@H_858_301@
Layer, HConcat, VConcat, Repeat, Facet助力altair轻松构建复合图形hconcat水平方向拼图
import altair as altfrom vega_datasets import datairis = data.iris.urlchart1 = alt.Chart(iris).mark_point().encode(x='petalLength:Q', y='petalWIDth:Q', color='specIEs:N').propertIEs( height=300, wIDth=300)chart2 = alt.Chart(iris).mark_bar().encode(x='count()', y=alt.Y('petalWIDth:Q', bin=alt.Bin(maxbins=30)), color='specIEs:N').propertIEs( height=300, wIDth=100)chart1 | chart2
alt.hconcat(chart1, chart2)
vconcat垂直方向拼图
LayerChart图层叠加
RepeatChart绘制类似图形
from vega_datasets import datairis = data.iris.urlbase = alt.Chart().mark_point().encode(color='specIEs:N').propertIEs( wIDth=200, height=200).interactive()chart = alt.vconcat(data=iris)for y_enCoding in ['petalLength:Q', 'petalWIDth:Q']: row = alt.hconcat() for x_enCoding in ['sepalLength:Q', 'sepalWIDth:Q']: row |= base.encode(x=x_enCoding, y=y_enCoding) chart &= rowchart
FacetChart图形分面
import altair as altfrom altair.expr import datumfrom vega_datasets import datairis = data.iris.urlbase = alt.Chart(iris).mark_point().encode(x='petalLength:Q', y='petalWIDth:Q', color='specIEs:N').propertIEs( wIDth=160, height=160)chart = alt.hconcat()for specIEs in ['setosa', 'versicolor', 'virginica']: chart |= base.transform_filter(datum.specIEs == specIEs)chart
Chart.resolve_scale(), Chart.resolve_axis(), and Chart.resolve_legend()个性化复合图形例如,使用resolve_scale()分别给两个图使用颜色盘。
from vega_datasets import datasource = data.cars()base = alt.Chart(source).mark_point().encode( x='Horsepower:Q', y='Miles_per_gallon:Q').propertIEs(wIDth=200, height=200)alt.concat(base.encode(color='Origin:N'), base.encode(color='Cylinders:O')).resolve_scale(color='independent')
3、基于altair的demo分享官网关与天气的一个案例from vega_datasets import datadf = data.seattle_weather()scale = alt.Scale( domain=['sun', 'fog', 'drizzle', 'rain', 'sNow'], range=['#e7ba52', '#c7c7c7', '#aec7e8', '#1f77b4', '#9467bd'])brush = alt.selection(type='interval')points = alt.Chart().mark_point().encode( alt.X('temp_max:Q', Title='Maximum Daily Temperature (C)'), alt.Y('temp_range:Q', Title='Daily Temperature Range (C)'), color=alt.condition(brush, 'weather:N', alt.value('lightgray'), scale=scale), size=alt.Size('precipitation:Q', scale=alt.Scale(range=[1, 200]))).transform_calculate( "temp_range", "datum.temp_max - datum.temp_min").propertIEs( wIDth=600, height=400).add_selection(brush)bars = alt.Chart().mark_bar().encode( x='count()', y='weather:N', color=alt.color('weather:N', scale=scale),).transform_calculate( "temp_range", "datum.temp_max - datum.temp_min").transform_filter(brush).propertIEs( wIDth=600)alt.vconcat(points, bars, data=df)
其他的案例见官网,不再过多搬运:
官网:https://altair-viz.github.io/index.html简单图
bar图
line图
area图
scatter图
histgogram图
map图
Interactive图
Case StudIEs
Other Charts
总结
以上是内存溢出为你收集整理的python大佬的可视化工具-Altair全部内容,希望文章能够帮你解决python大佬的可视化工具-Altair所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)