【问题标题】:Altair SchemaValidationError: Invalid specificationAltair SchemaValidationError:无效的规范
【发布时间】:2022-01-05 19:53:50
【问题描述】:

我制作了这张图表:

使用此代码:

q2 =  alt.Chart(source, width=100, height=100).mark_line().encode(
        y=alt.Y("prob:Q", title = ''),
        x=alt.X("year:O", title = ''),
        row=alt.Row("key1:N", title="Probability of "),
        column=alt.Column("key2:N", title="Given..."),
    )

但是,我需要每行出现“给定...”和“概率”,而不仅仅是一次,并且在每个图表的 x 轴上显示年份。它应该是这样的:

这是我正在使用的数据框:

我知道这需要一些级别的连接,但我不确定如何将这个概念应用到我的图表中。我试过这个:

charts = []
for key in totest:
    data = source[source['key1'] == key]
    chart = alt.Chart(data).mark_line().encode(
    y=alt.Y("prob:Q", title = ''),
    x=alt.X("year:O", title = ''),
    row=alt.Row("key1:N", axis=alt.Axis(title=['Probability of', key])),
    facet = alt.Facet("key2:N", sort=totest, title = "Given...")
            )
charts.append(chart)
return alt.vconcat(*charts)

但我收到此错误:

SchemaValidationError: Invalid specification

        altair.vegalite.v4.schema.channels.Row, validating 'additionalProperties'

        Additional properties are not allowed ('axis' was unexpected)
        

alt.VConcatChart(...)

【问题讨论】:

    标签: concatenation linechart altair vega-lite


    【解决方案1】:

    错误不是特别清楚,但问题是 Vega-Lite 渲染器不支持多面图表的串联。除了显示多个图表而不是连接它们之外,我不知道有什么好的解决方法可以做你想做的事情:

    for key in totest:
      data = source[source['key1'] == key]
      chart = alt.Chart(data).mark_line().encode(
        y=alt.Y("prob:Q", title = ''),
        x=alt.X("year:O", title = ''),
        row=alt.Row("key1:N", axis=alt.Axis(title=['Probability of', key])),
        facet = alt.Facet("key2:N", sort=totest, title = "Given...")
      )
      chart.display()
    

    【讨论】:

    • 谢谢杰克!非常感谢。
    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多