Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 # Create dataframe data = [[7, 10, 'Alex', 'Smith'], [

我想要两个交互式图例,类似于中的第二个示例 牵牛星的文档,但没有矩形图例。 一个图例应通过一个分类变量(“名字”)控制颜色,而第二个图例应通过另一个分类变量(“姓氏”)控制标记。虽然我能够正确地理解美学(见下面的情节),但第二个传说的互动性会导致意想不到的行为

我用来生成上图的代码如下:

import pandas as pd
import altair as alt

# Create dataframe
data = [[7, 10, 'Alex', 'Smith'],
        [12, 20, 'Bob', 'Jones'],
        [10, 30, 'Clive', 'Smith'],
        [42, 40,  'Alex', 'Johnson']]
df = pd.DataFrame(data,columns=['Favorite number', 'Age', 'First name', 'Last name'])

# Create selections
selection_first_name = alt.selection_multi(fields=['First name'])
selection_last_name = alt.selection_multi(fields=['Last name'])

# Create first name conditions
color_first_name = alt.condition(selection_first_name,
                                 alt.Color('First name:N', legend=None),
                                 alt.value('lightgray'))

# Create last name conditions
shape_last_name = alt.condition(selection_last_name,
                                    alt.Shape('Last name:N', legend=None),
                                    alt.value('lightgray'))

# Create interactive scatter plot
scatter = alt.Chart(df).mark_point(size=100).encode(
    x='Favorite number:Q',
    y='Age:Q',
    color=color_first_name,
    shape=shape_last_name,
    tooltip=['First name', 'Last name']
).add_selection(
    selection_first_name
).add_selection(
    selection_last_name
).add_selection(
    alt.selection_interval(bind='scales')
)

# Create interactive model name legend
legend_first_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('First name:N', axis=alt.Axis(orient='right')),
    color=color_first_name
).add_selection(
    selection_first_name
)

# Create interactive model name legend
legend_last_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('Last name:N', axis=alt.Axis(orient='right')),
    shape=shape_last_name
).add_selection(
    selection_last_name
)

# Combine plotting elements
chart = scatter | legend_first_name | legend_last_name
生成的HTML图表如下所示:


.织女星行动a{
右边距:12px;
颜色:#7575;
字体大小:正常;
字体大小:13px;
}
.错误{
颜色:红色;
}
(功能(素食床){
var spec={“config”:{“view”:{“width”:400,“height”:300},“mark”:{“tooltip”:null},“hconcat”:[{“mark”:{“type”:“point”,“size”:100},“encoding”:{“color”:{“condition”:{“type”:“nominal”,“field”:“First name”,“legend”:null,“selection”:“selector001”},“value”:“lightgray”},“shape”:{“condition”:“condition”:“type”:“type”:“nominal”,“field”:”“姓氏”,“图例”:null,“选择”:“selector002”},“值”:“浅灰色”},“工具提示”:[{“类型”:“标称”,“字段”:“名字”},{“类型”:“标称”,“字段”:“姓氏”}],“x”:{“类型”:“数量”,“字段”:“最喜爱的数字”},“y”:{“类型”:“数量”,“字段”:“年龄”},“选择”:{“selector001”:{“类型”:“多个”,“字段”:名字“]}”,选择器002:{“类型”:“多”,“字段”:[“姓氏”]},“选择器003”:{“类型”:“间隔”,“绑定”:“刻度”}},{“标记”:{“类型”:“点”,“大小”:100},“编码”:{“颜色”:{“条件”:{“类型”:“标称”,“字段”:“名字”,“图例”:null,“选择”:“选择器001”},“值”:“浅灰色”},“y”:{“类型”:“标称”,“轴”:“:{“orient”:“right”},“field”:“First name”},“selector001”:{“type”:“multi”,“fields”:[“First name”]}},{“mark”:{“type”:“point”,“size”:100},“encoding”:{“shape”:{“condition”:{“type”:“nominal”,“field”:“Last name”,“legend”:null,“selector002”},“value”:“lightgray”},“y”:{“type”nominal”,“axis”:{“orient”:“right”},“field”:“Last name”},“selection”:{“selector002”:{“type”:“multi”,“fields”:[“Last name”]}}}}],“data”:{“name”:“data-EC767A7204047BC9825DA631C9465FC”,$schema:”https://vega.github.io/schema/vega-lite/v3.4.0.json,“数据集”:{“数据-EC767A7204047BC9825DA631C9465FC”:[{“最喜欢的数字”:7,“年龄”:10,“名字”:亚历克斯,“姓氏”:“史密斯”},{“最喜欢的数字”:12,“年龄”:20,“名字”:“鲍勃”,“姓氏”:“琼斯”},{“最喜欢的数字”:10,“年龄”:30,“名字”:“克莱夫”,“姓氏”:“史密斯”},{“最喜欢的数字”:42,“年龄”:40,“名字”:“亚历克斯”,“姓氏”:“约翰逊”};
var embedOpt={“mode”:“vega lite”};
功能错误(el,错误){
el.innerHTML=(“”
+'JavaScript错误:'+Error.message+'

' +“这通常意味着您的图表规格中有输入错误。” +“有关完整的回溯,请参阅javascript控制台。

” + ''); 投掷误差; } const el=document.getElementById('vis'); 蔬菜床(“视觉”,规格,嵌入选项) .catch(error=>showError(el,error)); })(素食床);
形状编码的条件如下所示:

shape_last_name = alt.condition(selection_last_name,
                                    alt.Shape('Last name:N', legend=None),
                                    alt.value('lightgray'))
import pandas as pd
import altair as alt

# Create dataframe
data = [[7, 10, 'Alex', 'Smith'],
        [12, 20, 'Bob', 'Jones'],
        [10, 30, 'Clive', 'Smith'],
        [42, 40,  'Alex', 'Johnson']]
df = pd.DataFrame(data,columns=['Favorite number', 'Age', 'First name', 'Last name'])

# Create selections
selection_first_name = alt.selection_multi(fields=['First name'], empty='none')
selection_last_name = alt.selection_multi(fields=['Last name'], empty='none')

# Create interactive scatter plot
scatter = alt.Chart(df).mark_point(size=100).encode(
    x='Favorite number:Q',
    y='Age:Q',
    color=alt.condition(selection_first_name & selection_last_name,
                        alt.Color('First name:N', legend=None),
                        alt.value('lightgray') ),
    shape=alt.Shape('Last name:N', legend=None),
    tooltip=['First name', 'Last name']
).add_selection(
    alt.selection_interval(bind='scales')
)

# Create interactive model name legend
legend_first_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('First name:N', axis=alt.Axis(orient='right')),
    color=alt.condition(selection_first_name,
                        alt.Color('First name:N', legend=None),
                        alt.value('lightgray') ),
).add_selection(
    selection_first_name

)

# Create interactive model name legend
legend_last_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('Last name:N', axis=alt.Axis(orient='right')),
    shape=alt.Shape('Last name:N', legend=None),
    color=alt.condition(selection_last_name,
                        alt.value('black'),
                        alt.value('lightgray') ),
).add_selection(
    selection_last_name
)

# Combine plotting elements
chart = scatter | legend_first_name | legend_last_name
它指定当未选择某个点时,该点应具有名为
lightgray
的形状
lightgray
不是有效的形状,因此不会绘制任何点

如果要根据形状选择更改颜色,应将条件放入颜色编码中。如果要根据形状图例选择更改形状,应在条件中使用有效的形状值

我怀疑你想要的是这样的东西:

shape_last_name = alt.condition(selection_last_name,
                                    alt.Shape('Last name:N', legend=None),
                                    alt.value('lightgray'))
import pandas as pd
import altair as alt

# Create dataframe
data = [[7, 10, 'Alex', 'Smith'],
        [12, 20, 'Bob', 'Jones'],
        [10, 30, 'Clive', 'Smith'],
        [42, 40,  'Alex', 'Johnson']]
df = pd.DataFrame(data,columns=['Favorite number', 'Age', 'First name', 'Last name'])

# Create selections
selection_first_name = alt.selection_multi(fields=['First name'], empty='none')
selection_last_name = alt.selection_multi(fields=['Last name'], empty='none')

# Create interactive scatter plot
scatter = alt.Chart(df).mark_point(size=100).encode(
    x='Favorite number:Q',
    y='Age:Q',
    color=alt.condition(selection_first_name & selection_last_name,
                        alt.Color('First name:N', legend=None),
                        alt.value('lightgray') ),
    shape=alt.Shape('Last name:N', legend=None),
    tooltip=['First name', 'Last name']
).add_selection(
    alt.selection_interval(bind='scales')
)

# Create interactive model name legend
legend_first_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('First name:N', axis=alt.Axis(orient='right')),
    color=alt.condition(selection_first_name,
                        alt.Color('First name:N', legend=None),
                        alt.value('lightgray') ),
).add_selection(
    selection_first_name

)

# Create interactive model name legend
legend_last_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('Last name:N', axis=alt.Axis(orient='right')),
    shape=alt.Shape('Last name:N', legend=None),
    color=alt.condition(selection_last_name,
                        alt.value('black'),
                        alt.value('lightgray') ),
).add_selection(
    selection_last_name
)

# Combine plotting elements
chart = scatter | legend_first_name | legend_last_name

形状编码的条件如下所示:

shape_last_name = alt.condition(selection_last_name,
                                    alt.Shape('Last name:N', legend=None),
                                    alt.value('lightgray'))
import pandas as pd
import altair as alt

# Create dataframe
data = [[7, 10, 'Alex', 'Smith'],
        [12, 20, 'Bob', 'Jones'],
        [10, 30, 'Clive', 'Smith'],
        [42, 40,  'Alex', 'Johnson']]
df = pd.DataFrame(data,columns=['Favorite number', 'Age', 'First name', 'Last name'])

# Create selections
selection_first_name = alt.selection_multi(fields=['First name'], empty='none')
selection_last_name = alt.selection_multi(fields=['Last name'], empty='none')

# Create interactive scatter plot
scatter = alt.Chart(df).mark_point(size=100).encode(
    x='Favorite number:Q',
    y='Age:Q',
    color=alt.condition(selection_first_name & selection_last_name,
                        alt.Color('First name:N', legend=None),
                        alt.value('lightgray') ),
    shape=alt.Shape('Last name:N', legend=None),
    tooltip=['First name', 'Last name']
).add_selection(
    alt.selection_interval(bind='scales')
)

# Create interactive model name legend
legend_first_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('First name:N', axis=alt.Axis(orient='right')),
    color=alt.condition(selection_first_name,
                        alt.Color('First name:N', legend=None),
                        alt.value('lightgray') ),
).add_selection(
    selection_first_name

)

# Create interactive model name legend
legend_last_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('Last name:N', axis=alt.Axis(orient='right')),
    shape=alt.Shape('Last name:N', legend=None),
    color=alt.condition(selection_last_name,
                        alt.value('black'),
                        alt.value('lightgray') ),
).add_selection(
    selection_last_name
)

# Combine plotting elements
chart = scatter | legend_first_name | legend_last_name
它指定当未选择某个点时,该点应具有名为
lightgray
的形状
lightgray
不是有效的形状,因此不会绘制任何点

如果要根据形状选择更改颜色,应将条件放入颜色编码中。如果要根据形状图例选择更改形状,应在条件中使用有效的形状值

我怀疑你想要的是这样的东西:

shape_last_name = alt.condition(selection_last_name,
                                    alt.Shape('Last name:N', legend=None),
                                    alt.value('lightgray'))
import pandas as pd
import altair as alt

# Create dataframe
data = [[7, 10, 'Alex', 'Smith'],
        [12, 20, 'Bob', 'Jones'],
        [10, 30, 'Clive', 'Smith'],
        [42, 40,  'Alex', 'Johnson']]
df = pd.DataFrame(data,columns=['Favorite number', 'Age', 'First name', 'Last name'])

# Create selections
selection_first_name = alt.selection_multi(fields=['First name'], empty='none')
selection_last_name = alt.selection_multi(fields=['Last name'], empty='none')

# Create interactive scatter plot
scatter = alt.Chart(df).mark_point(size=100).encode(
    x='Favorite number:Q',
    y='Age:Q',
    color=alt.condition(selection_first_name & selection_last_name,
                        alt.Color('First name:N', legend=None),
                        alt.value('lightgray') ),
    shape=alt.Shape('Last name:N', legend=None),
    tooltip=['First name', 'Last name']
).add_selection(
    alt.selection_interval(bind='scales')
)

# Create interactive model name legend
legend_first_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('First name:N', axis=alt.Axis(orient='right')),
    color=alt.condition(selection_first_name,
                        alt.Color('First name:N', legend=None),
                        alt.value('lightgray') ),
).add_selection(
    selection_first_name

)

# Create interactive model name legend
legend_last_name = alt.Chart(df).mark_point(size=100).encode(
    y=alt.Y('Last name:N', axis=alt.Axis(orient='right')),
    shape=alt.Shape('Last name:N', legend=None),
    color=alt.condition(selection_last_name,
                        alt.value('black'),
                        alt.value('lightgray') ),
).add_selection(
    selection_last_name
)

# Combine plotting elements
chart = scatter | legend_first_name | legend_last_name

谢谢@jakevdp!这与我的想法非常接近。我想做两个额外的更改,但我遇到了麻烦:1.在上一个绘图中,你可以单击一个数据点,它会更改选择。我们可以在这里更改吗?2.这个逻辑的奇怪之处是,如果删除“empty=
none
“从选择中,您从图例中选择Alex、Bob和Clive,标记仍为灰色。这似乎不直观。有什么办法改变这个吗?很高兴为这些问题单独提问(1)是的,如果您将选择添加到散点图中,您将能够通过散点图与选择进行交互。(2) 这是vega lite中的一个错误,其中选择的逻辑组合不符合
empty=“all”
启动状态,并且在您与选择交互之前,选择将被视为空。下面是编写选择的相关vega lite错误:谢谢@jakevdp!这与我的想法非常接近。有两个额外的改变,我想做,我有麻烦:1。在上一个绘图中,您可以单击数据点,它将更改选择。我们能在这里改一下吗?2.这种逻辑的奇怪之处在于,如果从选择中删除“empty=
none
”,然后从图例中选择Alex、Bob和Clive,则标记仍然是灰色的。这似乎不直观。有什么办法改变这个吗?很高兴为这些问题单独提问