我在文档中读到可以多层构图,但是以某种方式将数据集中到输出图中,并在所有构面中重复。
我可以毫不费力地对每一层进行操作,这是cars数据集的示例:
import altair as alt
from altair import datum
from vega_datasets import data
cars = data.cars()
horse = alt.Chart(cars).mark_point().encode(
x = 'Weight_in_lbs',
y = 'Horsepower'
)
chart = alt.hconcat()
for origin in cars.Origin.unique():
chart |= horse.transform_filter(datum.Origin == origin).properties(title=origin)
chart
Run Code Online (Sandbox Code Playgroud)
miles = alt.Chart(cars).mark_point(color='red').encode(
x = 'Weight_in_lbs',
y = 'Miles_per_Gallon'
)
chart = alt.hconcat()
for origin in cars.Origin.unique():
chart |= miles.transform_filter(datum.Origin == origin).properties(title=origin)
chart
Run Code Online (Sandbox Code Playgroud)
但是合并后所有数据都会显示在每个图上
combined = horse + miles
chart = alt.hconcat()
for origin in cars.Origin.unique():
chart |= combined.transform_filter(datum.Origin == origin).properties(title=origin)
chart
Run Code Online (Sandbox Code Playgroud)
这是由于在文档的Facet部分的末尾非常简短地讨论了一些小问题。
您可以将Altair中的分层图表视为层次结构,将LayerChart对象作为父对象,并将每个单独的Chart对象作为子对象。子级可以从父级继承数据,也可以指定自己的数据,在这种情况下,父级数据将被忽略。
现在,由于您分别为每个子图表指定了数据,因此它们将忽略任何来自父图表的数据或转换。解决此问题的方法是仅在父级中指定数据。
附带说明一下,Altair还有一个用于手动过滤和连接您正在使用的快捷方式:facet()方法。这是将所有这些放在一起的示例:
import altair as alt
from vega_datasets import data
cars = data.cars()
horse = alt.Chart().mark_point().encode(
x = 'Weight_in_lbs',
y = 'Horsepower'
)
miles = alt.Chart().mark_point(color='red').encode(
x = 'Weight_in_lbs',
y = 'Miles_per_Gallon'
)
alt.layer(horse, miles, data=cars).facet(column='Origin')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |