📅  最后修改于: 2023-12-03 15:38:35.604000             🧑  作者: Mango
Altair是一个基于Python的数据可视化工具,可以帮助我们快速创建热力图、散点图、折线图等各种图形。箱线图是一种常用的数据可视化方式,通过展示数据的中位数、最大值、最小值、四分位数等信息,可以帮助我们更好地理解数据的分布情况。
在箱线图中,有时候我们希望将数据点进行抖动,以避免数据点之间的重合。本文将介绍如何在Python中使用Altair制作带有抖动数据点的箱线图。
我们先准备一个示例数据集,该数据集包含了两个变量A和B,每个变量有20个取值:
import numpy as np
import pandas as pd
np.random.seed(123)
data = pd.DataFrame({
"A": np.random.normal(loc=0, scale=1, size=20),
"B": np.random.normal(loc=0, scale=1, size=20)
})
我们首先来制作一个简单的箱线图,使用Altair的boxplot
函数即可:
import altair as alt
chart = alt.Chart(data).mark_boxplot().encode(
x="A",
y='B'
)
chart
该代码将生成一个简单的箱线图。
现在我们来为箱线图添加抖动数据点。Altair并没有提供一个直接的方式来实现这个功能,但我们可以先将数据点随机偏移一些距离,然后再将它们画在图上。
为了偏移数据点,我们可以使用np.random.normal
函数。该函数可以生成一个正态分布的随机数值,代码如下:
data["jitter"] = np.random.normal(loc=0, scale=0.1, size=(len(data),))
我们为每个数据点添加一个名为jitter
的新变量,该变量的值在每个数据点上都是随机生成的。我们可以将这个jitter
变量添加到x轴上,使得每个数据点都可以偏移一定的距离。代码如下:
chart = alt.Chart(data).mark_boxplot().encode(
x=alt.X("A", axis=alt.Axis(tickMinStep=0.5)),
y='B',
)
chart = chart.mark_circle(size=40, opacity=0.7, color="black").encode(
x=alt.X("A", axis=alt.Axis(tickMinStep=0.5)),
y=alt.Y('B', scale=alt.Scale(zero=False)),
tooltip=['B'],
x2=alt.X2('A', scale=alt.Scale(domain=(-0.5, 0.5)), title='', axis=None),
y2=alt.Y2('B+jitter', title='', scale=alt.Scale(zero=False)),
)
chart
该代码将生成一个带有抖动数据点的箱线图。我们通过mark_circle
函数将每个数据点画成了一个圆圈,并使用jitter
变量将它们随机偏移了一些距离。
下面是完整的程序代码:
import numpy as np
import pandas as pd
import altair as alt
np.random.seed(123)
data = pd.DataFrame({
"A": np.random.normal(loc=0, scale=1, size=20),
"B": np.random.normal(loc=0, scale=1, size=20)
})
data["jitter"] = np.random.normal(loc=0, scale=0.1, size=(len(data),))
chart = alt.Chart(data).mark_boxplot().encode(
x=alt.X("A", axis=alt.Axis(tickMinStep=0.5)),
y='B',
)
chart = chart.mark_circle(size=40, opacity=0.7, color="black").encode(
x=alt.X("A", axis=alt.Axis(tickMinStep=0.5)),
y=alt.Y('B', scale=alt.Scale(zero=False)),
tooltip=['B'],
x2=alt.X2('A', scale=alt.Scale(domain=(-0.5, 0.5)), title='', axis=None),
y2=alt.Y2('B+jitter', title='', scale=alt.Scale(zero=False)),
)
chart
本文介绍了如何在Python中使用Altair制作带有抖动数据点的箱线图。具体来说,我们通过随机偏移数据点,并使用mark_circle
函数将它们画成圆圈的方式,实现了这个功能。