在Interactive Bar + Heatmap中选择大数据集时冻结

时间:2019-05-21 18:12:58

标签: python altair

按照教程https://altair-viz.github.io/gallery/interactive_cross_highlight.html

当我处理自己的数据时,即使进行了一些调整,这通常也可以正常工作。但是我现在有一个奇怪的情况。

当我的单个条形尺寸超过10,000磅时,选择它(单选或多选的一部分)时,Altair会冻结。没有浏览器崩溃,没有挂起,它只是停止执行任何操作。

当前,我将数据读取到熊猫DF并将其传递。我试图直接传递CSV,但是由于某种原因,我什么也没得到,仅得到空图表。但是Im并不完全相信DF是问题所在,因为它可以生成初始图。仅当选择单个大条时才有问题。

谢谢!

The large bar at the top representing 20,000 entries is the problem.

编辑:

当前尝试-

dh = "C:\\Path\\My.csv"
outputDH='C:\\Path\\My.html'
dh_table   = pd.read_csv(dh)

selector4 = alt.selection_multi(encodings=['y', 'color'])

bar4=alt.Chart(dh_table).mark_bar().encode(
x=alt.X('count():Q', axis=alt.Axis(title='Observation Count')),
y=alt.Y('rid:N', stack='zero', axis=alt.Axis(title='RIDs')),
color=alt.condition(selector4, 'int_source:N', alt.value('lightgray'), 
legend=alt.Legend(title='Int Source'))
).add_selection(
selector4
)


text4 = alt.Chart(dh_table).mark_text(dx=-6, dy=3, 
color='white',clip=True).encode(
x=alt.X('count(rid):Q', stack='zero'),
y=alt.Y('rid:N'),
detail='int_source:N',
text=alt.Text('count(rid):Q', format='.0f')
)

rect4 = alt.Chart(dh_table).mark_rect().encode(
alt.X('did:N', axis=alt.Axis(title='DID')),
alt.Y('directive_state:N', axis=alt.Axis(title='State')),
alt.Color('count()',
    scale=alt.Scale(scheme='blues'),
    legend=alt.Legend(title='Num Records')
)
)

circ4 = rect4.mark_point().encode(
alt.Color("d_enum:N",
    scale=alt.Scale(scheme='inferno'),
    legend=alt.Legend(title='DEnum', tickMinStep=1)
),
alt.Size('d_enum:N',
    legend=alt.Legend(title='DEnum', tickMinStep=1)
)
).transform_filter(selector4)

alt.hconcat(
(rect4+circ4).resolve_scale(color='independent'),
(bar4+text4)
).resolve_legend(
color="independent",
size="independent"
).save(outputDH)

现在,当我说我尝试直接传递CSV时,我的意思是代替传递数据帧dh_table,而是传递dh。这导致表中没有数据。所以我回到传递数据框。

但是,我解决了。看来这与实际为NULL的列有关。 出于某种原因,一旦我检查完并将NULL替换为非敏感ID(例如9999999999),整个问题就消失了。它仍然比正常情况花费一到两秒的时间,但我认为这是预期的,多选中有25,000多个条目。

0 个答案:

没有答案