【问题标题】:Altair: Can't facet layered plotsAltair:不能刻面分层地块
【发布时间】:2018-10-18 11:26:20
【问题描述】:

我在documentation 中读到,我可以对多层图进行分面,但不知何故,数据在输出图中集中在一起,并在所有方面重复。

我可以毫无问题地对每一层进行刻面,这是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

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

但是当合并所有数据时,所有数据都会显示在每个图中

combined = horse + miles

chart = alt.hconcat()
for origin in cars.Origin.unique():
    chart |= combined.transform_filter(datum.Origin == origin).properties(title=origin)
chart

我做错了吗?

【问题讨论】:

    标签: python altair


    【解决方案1】:

    这是由于文档中Facet section 结尾处简要讨论的一个小问题。

    您可以将 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')
    

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 2020-05-12
      • 2020-07-23
      • 1970-01-01
      相关资源
      最近更新 更多