保存 Altair 图表#
Altair 图表对象有一个 Chart.save() 方法,可以将图表保存为多种格式。
JSON格式#
Altair 输出的基本图表表示形式是 JSON 字符串格式;Altair 提供的核心方法之一是 Chart.to_json(),它返回一个表示图表内容的 JSON 字符串。此外,您可以使用 Chart.save() 将图表保存到 JSON 文件中,通过传递一个带有 .json 扩展名的文件名。
例如,这里我们将一个简单的散点图保存为JSON:
import altair as alt
from vega_datasets import data
chart = alt.Chart(data.cars.url).mark_point().encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q',
color='Origin:N'
)
chart.save('chart.json')
生成文件的内容大致如下:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"config": {
"view": {
"continuousHeight": 300,
"continuousWidth": 300
}
},
"data": {
"url": "https://vega.github.io/vega-datasets/data/cars.json"
},
"encoding": {
"color": {
"field": "Origin",
"type": "nominal"
},
"x": {
"field": "Horsepower",
"type": "quantitative"
},
"y": {
"field": "Miles_per_Gallon",
"type": "quantitative"
}
},
"mark": {"type": "point"}
}
这个 JSON 可以通过 vegaEmbed 库插入到任何网页中。
HTML格式#
如果您希望Altair为您处理HTML嵌入,您可以使用以下方式直接将图表保存为HTML文件
chart.save('chart.html')
这将创建一个简单的HTML模板页面,加载Vega、Vega-Lite和 vegaEmbed,这样在浏览器中打开时图表将被渲染。
例如,将上述散点图保存为HTML会创建一个包含以下内容的文件,该文件可以在任何现代的支持javascript的网页浏览器中打开和渲染:
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
</head>
<body>
<div id="vis"></div>
<script type="text/javascript">
var spec = {
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"config": {
"view": {
"continuousHeight": 300,
"continuousWidth": 300
}
},
"data": {
"url": "https://vega.github.io/vega-datasets/data/cars.json"
},
"encoding": {
"color": {
"field": "Origin",
"type": "nominal"
},
"x": {
"field": "Horsepower",
"type": "quantitative"
},
"y": {
"field": "Miles_per_Gallon",
"type": "quantitative"
}
},
"mark": {"type": "point"}
};
var opt = {"renderer": "canvas", "actions": false};
vegaEmbed("#vis", spec, opt);
</script>
</body>
</html>
您可以在这里查看结果: chart.html。
默认情况下, canvas 用于在 vegaEmbed 中渲染可视化。要更改为 svg 渲染,使用 embed_options 如下:
chart.save('chart.html', embed_options={'renderer':'svg'})
注意
这与 alt.renderers.enable('svg') 不同,它将图表渲染为 Jupyter notebook 中的静态 svg 图像。
离线HTML支持#
默认情况下,通过 chart.save('chart.html') 生成的 HTML 文件会从在线 CDN 位置加载必要的 JavaScript 依赖。这会导致生成一个小的 HTML 文件,但这意味着需要 active internet connection 才能显示图表。
作为替代,可以提供inline=True关键词参数给chart.save以生成一个包含所有必要JavaScript依赖的内联HTML文件。这会导致文件大小增大,但以这种方式生成的HTML文件不需要活动的互联网连接即可显示。
chart.save('chart.html', inline=True)
注意
调用 chart.save 并设置 inline=True 需要 额外依赖。
PNG、SVG 和 PDF 格式#
要将Altair图表对象保存为PNG、SVG或PDF图像,可以使用
chart.save('chart.png')
chart.save('chart.svg')
chart.save('chart.pdf')
注意
附加依赖 是通过运行解析Vega-Lite规范并以图像形式输出所需的javascript代码来保存图表为图像所必需的。
altair_saver#
注意
altair_saver 在 Altair 4 及更早版本中使用。它不再维护,已被 vl-convert 取代,后者提供了更优越的用户体验和性能。
PNG图形大小/分辨率#
当使用 chart.save() 创建 PNG 图像时,生成图像的分辨率默认为每英寸 72 像素 (ppi)。要在保持相同物理大小的情况下更改图像的分辨率,可以向 chart.save 提供 ppi 参数。例如,保存分辨率为每英寸 200 像素的图像:
chart.save('chart.png', ppi=200)
要在保持分辨率的情况下改变生成图像的物理大小,可以使用
scale_factor 参数。例如,要以默认分辨率72 ppi将图像保存为默认大小的两倍:
chart.save('chart.png', scale_factor=2)
附加依赖#
将图表保存为图像或离线HTML文件需要vl-convert包:
conda install -c conda-forge vl-convert-python
或:
pip install vl-convert-python
vl-convert 不需要任何外部依赖。 有关信息和已知的 限制,请参阅 vl-convert 文档。