安装和示例

Vega是一个基于Web的声明式可视化语法(Declarative Visualization Grammar),在Python中,可安装atair来调用Vega

pip install altair vega_datasets -i https://pypi.tuna.tsinghua.edu.cn/simple

简单示例如下

在这里插入图片描述

这是个html格式的文件,支持导出为其他格式,且支持在Vega编辑器中进一步编辑。绘图代码如下,简单直观。

import altair as alt
from vega_datasets import data

cars = data.cars()

# 创建图表
chart = alt.Chart(cars).mark_circle().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q',
    color='Origin:N'
).properties(width=640, height=480)

chart.save('test_vega.html')

【mark_circle】是散点图,【encode】用于编辑散点图的数据。

绘图数据x,y显然是从数据集中选取标签,Q标记标识这是个确定的数值。

Vega编辑器

VS Code提供了Vega Viewer,用于查看Vega图像。

【to_json】可以将图表导出为json格式的字符串,将该字符串另存为json格式,就可以在Vega Viewer中编辑了。

json = chart.to_json(indent=2) # indent=2 让输出更易读

# 保存到本地文件
with open('chart_spec.json', 'w') as f:
    f.write(json)

在VS Code中打开对应的json文件后,按下【Ctrl+Shift+P】,输入【Vega: Preview Vega Graph】,则其右侧可弹出当前json图像。

Vega Viewer中提供了一些基础示例,按下【Ctrl+Shift+P】,输入【Vega: Examples】,即可选择示例数据并打开,打开之后,就可以使用刚刚的绘图指令进行查看了。

交互式图表

Vega不仅静态图表,也支持动态交互,示例如下

在这里插入图片描述

图中红线为选中区域的平均值,随着拖动范围的不断变化,红线的高度也在不断进行计算。代码如下

import altair as alt
from vega_datasets import data
source = data.seattle_weather()
brush = alt.selection_interval(encodings=['x'])

bars = alt.Chart().mark_bar().encode(
    x='month(date):O',
    y='mean(precipitation):Q',
    opacity = alt.when(brush).then(alt.value(1)).otherwise(alt.value(0.7)),
).add_params(
    brush
)

line = alt.Chart().mark_rule(color='firebrick').encode(
    y='mean(precipitation):Q',
    size=alt.SizeValue(3)
).transform_filter(
    brush
)

alt.layer(bars, line, data=source
).properties(width=640, height=400
).save('weather.html')

代码中,【mark_bar】为柱形图,【mark_rule】为直线。

和前面绘制cars时的数据不同,这回 x , y x,y x,y的取值中出现了函数语法,其中month用于提取日期的月份,mean用于计算平均值。在bars中,由于指定了x值,所以求平均时会和x一一对应;而line中,并未指定x值,所以求平均的时候,会参照用户选择的区域。

更多推荐