我正在尝试在Altair中创建两个分层的直方图(每个垂直直尺)。我想要一个传说来标记这四个标签。
我正在使用可以here找到的第一个“我的体重”数据
我的代码(很长,很抱歉)看起来像这样:
for
我只想用一个图例指定哪个直方图/均值属于什么。
如果我也可以给它们着色,并且也许以这种方式添加图例,那也很好,但是我不确定如何这样做。
感谢您的见解!
答案 0 :(得分:3)
您应该在整个数据集上使用颜色编码,而不是手动创建带有过滤数据的图层:这样,图例将自动生成。
例如:
import altair as alt
import pandas as pd
babyData = pd.read_csv('https://www.stat.berkeley.edu/users/statlabs/data/babiesI.data', delim_whitespace=True)
base = alt.Chart(babyData).transform_filter(
'datum.smoke != 9'
)
hist = base.mark_bar(opacity=0.5).encode(
alt.X("bwt:Q",title='Birth Weight (Ounces)', bin=True),
alt.Y('count()', title='Count'),
color='smoke:N'
).properties(
width=400,
height=400
)
mean = base.mark_rule().encode(
x='mean(bwt):Q',
size=alt.value(4),
color='smoke:N'
)
hist + mean
从那里开始,您可以对每个标记使用Customize the color schemes的标准方法。
答案 1 :(得分:2)
@jakevdp击败了我!我打算说同样的话。这是一个完整的示例供您使用。
import pandas as pd
import altair as alt
# Link to data source
URL = 'https://www.stat.berkeley.edu/users/statlabs/data/babiesI.data'
# Read data into a pandas dataframe
df = pd.read_table(URL, sep='\s+')
hist = alt.Chart(df).mark_area(
opacity=0.7,
interpolate='step'
).encode(
alt.X("bwt:Q", axis=alt.Axis(title='Birth Weight (Ounces)'), bin=True),
alt.Y('count()', axis=alt.Axis(title='Count'), stack=None),
alt.Color('smoke:N')
).properties(
width=400,
height=400
).transform_filter(alt.datum.smoke != 9)
rule = alt.Chart(df).mark_rule(color='red').encode(
alt.Detail('smoke:N'),
alt.Color('smoke:N'),
alt.X('mean(bwt):Q'),
size=alt.value(4),
).transform_filter(alt.datum.smoke != 9)
hist + rule