Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 牛郎星:值仍然是插补的,即使它们应该被停用_Python_Altair - Fatal编程技术网

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值”
这两个选项都没有(每个图层都是单个组,并且没有指定keyvals),因此不会插补任何值

解决此问题的最简单方法可能是使用颜色编码代替手动过滤+图层方法:

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()