情况似乎很简单:我正在使用Jupyter Lab文件处理多个Altair绘图,这些绘图最终使该文件太大,无法运行和保存。由于不需要每次都查看这些图,因此我想可以通过在脚本开头指定plotAltair = True
之类的内容,然后将每个Altair图嵌套在if
语句中来避免这种情况。听起来似乎很简单,但是由于某种原因,它似乎没有用。我会错过明显的东西吗? [edit:原来我是]
例如:
import altair as alt
import os
import pandas as pd
import numpy as np
lengths = np.random.randint(0,100,200)
lengths_list = lengths.tolist()
labels = [str(i) for i in lengths_list]
peak_lengths = pd.DataFrame.from_dict({'coords': labels,
'lengths': lengths_list},
orient='columns')
有效方法:
alt.Chart(peak_lengths).mark_bar().encode(
x = alt.X('lengths:Q', bin=True),
y='count(*):Q'
)
什么不起作用:
plotAltair = True
if plotAltair:
alt.Chart(peak_lengths).mark_bar().encode(
x = alt.X('lengths:Q', bin=True),
y='count(*):Q'
)
**观察员:我已经尝试过使用alt.data_transformers.enable('json')
作为减小文件大小的一种方法,并且它也不起作用,但是请不要着重于此,而要关注更简单的问题。
答案 0 :(得分:2)
简短答案:使用chart.display()
长答案:Jupyter笔记本电脑通常只会在您指示的情况下显示内容。例如,此代码将不会产生任何输出:
if x:
x + 1
您正在告诉笔记本评估x + 1
,但不对其进行任何操作。您需要做的是告诉笔记本打印结果,方法是隐式将其作为最后一行显示在单元格的主行中,或者显式通过询问语句出现在其他任何地方时将其打印出来:
if x:
print(x + 1)
与Altair图表类似,它们只是普通的Python对象。如果将图表放在单元格的末尾,则隐式地要求显示结果,Jupyter会像显示任何变量一样显示它。如果希望从单元格中的任何其他位置显示它,则需要明确要求使用IPython.display.display()
函数显示它:
from IPython.display import display
if plotChart:
chart = alt.Chart(data).mark_point().encode(x='x', y='y')
display(chart)
由于这种额外的导入有点冗长,因此Altair提供了一种.display()
方法作为便利功能来完成相同的操作:
if plotChart:
chart = alt.Chart(data).mark_point().encode(x='x', y='y')
chart.display()
请注意,在多个图表上调用.display()
是您可以在单个单元格中显示多个图表的方式。