如何使 Altair 分面图中的区域着色保持一致?
How do I keep area coloring consistent in Altair facet charts?
我想让我的阴影区域足够透明,以便看到下面的网格。所有三个方面都以不同的灰色阴影结束。我希望它们看起来都像第一个。示例:
import altair as alt
from vega_datasets import data
source = data.cars()
source['Start'] = 100
source['Middle'] = 175
source['End'] = 250
cars = alt.Chart(source).mark_circle(size=100).encode(
x=alt.X("Horsepower:Q"),
y=alt.Y("Miles_per_Gallon:Q"),
color=alt.Color('Weight_in_lbs:Q'))
area1 = alt.Chart(source).mark_rect(color='#696969',opacity=0.005).encode(
x=alt.X('Start'),
x2='Middle',
y=alt.value(0),
y2=alt.value(300))
area2 = alt.Chart(source).mark_rect(color='#696969',opacity=0.01).encode(
x=alt.X('Middle'),
x2='End',
y=alt.value(0),
y2=alt.value(300))
(area1+area2+cars).properties(height=300, width=300
).facet(alt.Column('Origin:N'))
输出:
问题是每一行都有一个 start/middle/end 值,因此您要在每个面的每个点上堆叠一个半透明矩形。由于小平面有不同数量的点,因此有不同数量的矩形,并且由此产生的阴影看起来更暗或更亮。
解决此问题的最简单方法是使用聚合,以便每个面板仅绘制一个矩形:
import altair as alt
from vega_datasets import data
source = data.cars()
source['Start'] = 100
source['Middle'] = 175
source['End'] = 250
cars = alt.Chart(source).mark_circle(size=100).encode(
x=alt.X("Horsepower:Q"),
y=alt.Y("Miles_per_Gallon:Q"),
color=alt.Color('Weight_in_lbs:Q'))
area1 = alt.Chart(source).mark_rect(color='#696969',opacity=0.1).encode(
x='min(Start)',
x2='min(Middle)',
y=alt.value(0),
y2=alt.value(300))
area2 = alt.Chart(source).mark_rect(color='#696969',opacity=0.2).encode(
x='min(Middle)',
x2='min(End)',
y=alt.value(0),
y2=alt.value(300))
(area1+area2+cars).properties(height=300, width=300
).facet(alt.Column('Origin:N'))
我想让我的阴影区域足够透明,以便看到下面的网格。所有三个方面都以不同的灰色阴影结束。我希望它们看起来都像第一个。示例:
import altair as alt
from vega_datasets import data
source = data.cars()
source['Start'] = 100
source['Middle'] = 175
source['End'] = 250
cars = alt.Chart(source).mark_circle(size=100).encode(
x=alt.X("Horsepower:Q"),
y=alt.Y("Miles_per_Gallon:Q"),
color=alt.Color('Weight_in_lbs:Q'))
area1 = alt.Chart(source).mark_rect(color='#696969',opacity=0.005).encode(
x=alt.X('Start'),
x2='Middle',
y=alt.value(0),
y2=alt.value(300))
area2 = alt.Chart(source).mark_rect(color='#696969',opacity=0.01).encode(
x=alt.X('Middle'),
x2='End',
y=alt.value(0),
y2=alt.value(300))
(area1+area2+cars).properties(height=300, width=300
).facet(alt.Column('Origin:N'))
输出:
问题是每一行都有一个 start/middle/end 值,因此您要在每个面的每个点上堆叠一个半透明矩形。由于小平面有不同数量的点,因此有不同数量的矩形,并且由此产生的阴影看起来更暗或更亮。
解决此问题的最简单方法是使用聚合,以便每个面板仅绘制一个矩形:
import altair as alt
from vega_datasets import data
source = data.cars()
source['Start'] = 100
source['Middle'] = 175
source['End'] = 250
cars = alt.Chart(source).mark_circle(size=100).encode(
x=alt.X("Horsepower:Q"),
y=alt.Y("Miles_per_Gallon:Q"),
color=alt.Color('Weight_in_lbs:Q'))
area1 = alt.Chart(source).mark_rect(color='#696969',opacity=0.1).encode(
x='min(Start)',
x2='min(Middle)',
y=alt.value(0),
y2=alt.value(300))
area2 = alt.Chart(source).mark_rect(color='#696969',opacity=0.2).encode(
x='min(Middle)',
x2='min(End)',
y=alt.value(0),
y2=alt.value(300))
(area1+area2+cars).properties(height=300, width=300
).facet(alt.Column('Origin:N'))