gpt4 book ai didi

python - 在 Altair (Python) 中标记分层图表

转载 作者:行者123 更新时间:2023-12-05 00:57:33 26 4
gpt4 key购买 nike

我正在尝试在 Altair 中创建两个分层直方图(每个都有一个垂直平均标尺)。我想要一个图例来标记这四个中的每一个。

我正在使用第一个可以找到的“出生体重 I”数据 here

我的代码(很长,很抱歉)看起来像这样:

from altair import datum

# This histogram for baby weights of mothers who dont smoke
dont = alt.Chart(babyData).mark_bar().encode(
alt.X("bwt-oz:Q", axis=alt.Axis(title='Birth Weight (Ounces)'), bin=True),
alt.Y('count()', axis=alt.Axis(title='Count'), scale=alt.Scale(domain=[0, 350]))
).properties(
width=400,
height=400
).transform_filter(
datum.smoke == 0,
)

mean = alt.Chart(babyData).mark_rule(color='red').encode(
x='mean(bwt-oz):Q',
size=alt.value(4)
).transform_filter(
datum.smoke == 0
)

dontSmokeChart = dont + mean

# This histogram for baby weights of mothers who smoke
do = alt.Chart(babyData).mark_bar().encode(
alt.X("bwt-oz:Q", axis=alt.Axis(title='Birth Weight (Ounces)'), bin=True),
alt.Y('count()', axis=alt.Axis(title='Count'), scale=alt.Scale(domain=[0, 350]))
).transform_filter(
datum.smoke == 1
).properties(
width=400,
height=400
)

mean2 = alt.Chart(babyData).mark_rule(color='red').encode(
x='mean(bwt-oz):Q',
size=alt.value(4)
).transform_filter(
datum.smoke == 1
)

doSmokeChart = do + mean2

# This layers, and puts them all together

layer = alt.layer(
dont,
mean,
do,
mean2
).properties(
title="Layered Histogram of Baby Weights of Mothers Who smoke Vs. Who Don't",
).configure_mark(
opacity=0.5,
color='blue',
)
layer

最终的分层图表如下所示: /image/OR9f4.png

我只想要一个图例,说明哪个直方图/平均值属于什么。

如果我也可以给它们上色,或者以这种方式添加一个图例,那也很好,但我不确定该怎么做。

感谢您的任何见解!

最佳答案

您应该在完整数据集上使用颜色编码,而不是手动创建包含过滤数据的图层:然后会自动生成图例。

例如:

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

enter image description here

从那里您可以使用标准方法来处理 Customize the color schemes用于每个标记。

关于python - 在 Altair (Python) 中标记分层图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59921991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com