2

我正在使用 Databricks 笔记本。由于各种原因,我需要单独渲染图表(concat 没有给我想要的结果)并且我不能将图表对象放在单元格的末尾。我想渲染每个图表并进行一些处理。这是一些简单的代码,显示了我想要做什么。

import altair as alt
import pandas as pd

alt.renderers.enable('default')
df = pd.DataFrame({'x':  [1,2,3,4,5],
                   'y1': [1,2,3,4,5],
                   'y2': [6,7,8,9,10]})

for y in ['y1', 'y2']:
  chart = (alt.Chart(df, title="{0} vs x".format(y))
           .mark_line()
           .encode(x=alt.X('x:Q'),
                   y=alt.Y(y, title='Score')))
  chart.display()
  pass # More code that does stuff

不幸的是,输出是:

alt.Chart(...)
alt.Chart(...)

我已经尝试过 vega 版本 2.2.0、3.4.0 和 3.5.0,但我仍然遇到同样的问题。我正在使用 altair 版本 4.1.0、IPython 版本 7.19.0 和 Python 3.8.8。

我尝试了不同的渲染器('mimetype'、'notebook'),但我什么也没得到。

有谁知道如何让 display() 方法在 Databricks 中工作?

4

1 回答 1

1

您可以使用HConcatChart的对象来合并要创建的 n 个图表 -

import altair as alt
import pandas as pd

alt.renderers.enable('default')
df = pd.DataFrame({'x':  [1,2,3,4,5],
                   'y1': [1,2,3,4,5],
                   'y2': [6,7,8,9,10]})

base_chart_x = alt.HConcatChart()
base_chart_y = alt.HConcatChart()

for y in ['y1', 'y2']:
    chart = (alt.Chart(df, title="{0} vs x".format(y))
       .mark_line()
       .encode(x=alt.X('x:Q'),
               y=alt.Y(y, title='Score')))

    #### | --> Adds Charts Horizontally 
    base_chart_x |= chart

    #### & --> Adds Charts Vertically 
    base_chart_y &= chart

水平连接 (base_chart_x)

垂直连接 (base_chart_y)

此外,您可以使用带有 enumerate 的 for 循环来控制合并,merge每 2-3 个图表翻转一次以生成网格

于 2021-06-23T09:22:55.953 回答