rou*_*dan 11 python plotly vega-lite altair
最近我正在学习Plotly express和Altair/Vega-Lite进行交互式绘图。他们两个都令人印象深刻,我想知道他们的优点和缺点是什么。特别是对于创建交互式情节,它们之间有什么大的区别,什么时候比另一个更合适?
joe*_*lom 19
尽量不涉及个人喜好和太多细节,以下是据我所知两者之间的一些主要异同。
Plotly express 和 Altair 都是高级声明性库,这意味着您可以根据数据和关系(例如在 seaborn、holoviews 和 ggplot 中)而不是根据较低级别的绘图机制(例如在 matplotlib 和 bokeh 中)来表达自己。这需要较少的输入并让您专注于数据,但您对绘图中的确切细节的控制也较少。
两者都是基于底层 javascript 库的交互式绘图包。Plotly express 位于 plotly.py 之上,它是 plotly.js 的 Python 包装器,而 Altair 是 VegaLite.js 的包装器,后者又基于 Vega.js。plotly.js 和 Vega 都基于 D3 可视化库,这是标准的 js viz 库。
更根本的区别之一是语法。Plotly 的语法更侧重于为每个图使用单独的函数,然后该函数采用多个参数来控制其行为。例如, violinplot 函数有一个参数,用于确定是否还应包含带状图。Altair 专注于拥有图形语法,您可以在其中从单个图形语法单元组成图表,就像从单词组成句子一样。例如,如果我想在 Altair 中组合两个图表,我会单独创建它们并通过图层运算符将它们添加在一起(这也可以在 Plotly 中扩展,但在 Plotly express 中并不总是那么简单)。所以 Altairs 的语法原则与 ggplot 非常相似,而 Plotly express 在语法上更(但不完全)像 seaborn。
两者都非常有能力,可以创建通过交互链接在一起的图的多面板布局,例如更新其他图的过滤或悬停事件。目前,Altair 中的所有交互都是客户端(发生在您的浏览器中,并且在将笔记本导出为 HTML 时仍然存在),而 Plotly 具有客户端和服务器端交互(需要运行 Python 服务器)。因此,如果您正在使用 Plotly 的仪表板解决方案 Dash,您可以触发自定义函数以在 Plotly 图中的选择上执行,而在 Altair 中,您只能使用此选择更新其他 Altair 绘图。Altair 的服务器端交互性可能会在未来为仪表板包 Streamlit 实现。
Altair 是我所知道的唯一一个具有交互语法的可视化包,它允许您根据与通过图形语法创建绘图时类似的原则来组合小部件和绘图之间的交互,这既提供了一致的体验,又可以允许在设计交互时提高创造力和灵活性。Plotly 以一种直观的方式支持动画,如果您的数据是时间序列或类似的数据,这可能会很棒。
请查看Altair和Plotly 快车画廊,以确定您喜欢哪种美学。许多默认值(背景颜色、标记大小、轴号等)当然是可变的(单独或通过主题),但您仍然可以通过在画廊中花费时间来了解您的绘图的外观。
一个显着的区别是 Altair 将保持绘图元素和间距不变,同时调整绘图大小以适应更多分类条目,而 Plotly 将修改绘图中元素的间距和大小以适应整体绘图大小。对于分面子图,Altair 将保持每个子图的大小不变,并在添加更多时扩展图表的总大小,而 Plotly 会将子图拟合到图的整体大小中,并在添加更多时使每个图更小。您可以调整这两个库以创建所需大小的图,但这是它们开箱即用的方式。
Plotly 目前支持更多类型的图形,并具有一些特殊功能,例如生物图和图像分析。Plotly 可以使用 WebGL 和数据着色器为某些类型的绘图加速性能,而 Vega 的可扩展性能仍在开发中。Plotly 是由一家为其某些产品提供企业支持的公司创建的。Vegalite 是由开发 D3 的同一研究小组开发的。两者都是开源的。
| 归档时间: | 
 | 
| 查看次数: | 2528 次 | 
| 最近记录: |