Python 牛郎星:值仍然是插补的,即使它们应该被停用
我对牵牛星互动情节有问题。下面是代码的一小部分Python 牛郎星:值仍然是插补的,即使它们应该被停用,python,altair,Python,Altair,我对牵牛星互动情节有问题。下面是代码的一小部分 import pandas as pd import altair as alt import numpy as np import random n=300 dat = pd.DataFrame() dat['X_axis'] = np.linspace(start=0.0, stop=1000, num = n) mean = 4 std = 1 dat['Y_axis']=np.random.normal(loc=mean, scale=s
import pandas as pd
import altair as alt
import numpy as np
import random
n=300
dat = pd.DataFrame()
dat['X_axis'] = np.linspace(start=0.0, stop=1000, num = n)
mean = 4
std = 1
dat['Y_axis']=np.random.normal(loc=mean, scale=std, size = n)
dat['anom'] = np.random.choice([False, True ], size = (n,), p= [0.90, 0.10])
anomalies = alt.Chart(dat[dat['anom']==True]).mark_line(color='red').encode(x='X_axis', y=alt.Y('Y_axis', impute=alt.ImputeParams(value=None))).interactive()
normal = alt.Chart(dat[dat['anom']==False]).mark_line(color='blue').encode(x='X_axis',y=alt.Y('Y_axis', impute=alt.ImputeParams(value=None))).interactive()
display(alt.layer(anomalies, normal, title='Title_of_the_plot'))
生成的图是
从图中可以看出,蓝线与红线重叠,这意味着不存在间隙(由红线填充),而是对值进行插值。impute参数指定应如何处理缺少的值。在您共享的图表中,没有缺少的值 为什么??牛郎星并不试图猜测你可能会考虑什么“失踪”。有两种方法可以表示缺少结果:
- 如果绘制分组图表,并且任何组缺少其他组中的一个值,则impute将填充该值
- 缺省情况下,可以显式指定<代码>键< /Cord>参数,以指示您希望考虑哪些“x值”
alt.Chart(dat).mark_line().encode(
x='X_axis',
y=alt.Y('Y_axis', impute=alt.ImputeParams(value=None)),
color='anom'
).interactive()
现在,一组中缺少的值和另一组中存在的值被视为“缺少”,并分配一个空值。指定值之间仍然存在插值,但这是因为两个组都未定义此范围内的值。我怀疑这可能不是你想要的
因此,您可以尝试指定keyvals
,以指示希望忽略哪些值。我们可以使用alt.ImputeSequence(val)
,它实际上表示您希望所有未定义的整数值都被视为“缺失”:
图表为空,因为数据集在相邻的整数x值处不包含点,因此不会绘制线段。这可能不是你想要的
那你想要什么?嗯,你还没有真正定义它。您必须找出哪些x值希望被视为“缺失”,哪些不希望。一旦你决定了这一点,你就可以使用上述方法对你的意图进行编码,并创建你心目中的图表。你能编辑你的问题并添加一个显示问题的图表吗?@jakevdp刚刚做了你是如何定义
dat
?@jakevdp的。编辑以反映that@jakevdp为alt.layer()添加了另一个小编辑,非常感谢您提供了如此详细的答案。如何解决第一个绘图中的间隙(缺失值)?是否可以在两个单独的组之间进行插值,并生成一个更连续的图形,而不是有间隙?我知道,可以使用keyvals
,但如果在生成图形的循环中有一个,keyvals
将不断变化。如果您希望插值而不是空值,则可以相应地设置插补参数。看,我熟悉这个链接。我的目标是使图形没有任何间隙;换言之,我试图有一个连续的情节。最好的方法是什么?要制作一个连续的图形,你应该根据你想要的值被插补的方式来设置插补参数。
alt.Chart(dat).mark_line().encode(
x='X_axis',
y=alt.Y('Y_axis', impute=alt.ImputeParams(value=None, keyvals=alt.ImputeSequence(dat.X_axis.max()))),
color='anom'
).interactive()