📜  如何在Python中使用 Altair 制作带有中线的直方图?

📅  最后修改于: 2022-05-13 01:54:25.374000             🧑  作者: Mango

如何在Python中使用 Altair 制作带有中线的直方图?

在本文中,我们将学习如何在Python中使用Altair制作带有中线的直方图。这篇文章也是 Altair 图形语法的一个很好的例子。

Altair 是Python中最新的交互式数据可视化库之一。 Altair 基于 vega 和 vegalite——交互式图形的语法。这里我们将使用 import 关键字来使用 Altair 库来使用它。

用中线说明直方图

首先,我们将加载用于使用 Altair 制作带有均值线和中线的直方图的Python包。

Python3
# import required modules
import altair as alt
import numpy as np
import pandas as pd


Python3
# generating data
np.random.seed(42)
df = pd.DataFrame({'height': np.random.normal(150, 10, 1000)})


Python3
# initialize chart
base=alt.Chart(df)


Python3
# generate histogram
hist = base.mark_bar().encode(
    x=alt.X('height:Q', bin=alt.BinParams(), axis=None), y='count()')


Python3
# generate median line
median_line = base.mark_rule().encode(
    x=alt.X('mean(height):Q', title='Height'), size=alt.value(5))


Python3
# depict illustration
hist+median_line


Python3
# import required modules
import altair as alt
import numpy as np
import pandas as pd
  
# generating data
np.random.seed(42)
df = pd.DataFrame({'height': np.random.normal(150, 10, 1000)})
  
# initialize chart
base = alt.Chart(df)
  
# generate histogram
hist = base.mark_bar().encode(
    x=alt.X('height:Q', bin=alt.BinParams(maxbins=100), axis=None), y='count()')
  
# generate median line
red_median_line = base.mark_rule(color='red').encode(
    x=alt.X('mean(height):Q', title='Height'), size=alt.value(5))
  
# depict illustration
hist+red_median_line


现在我们将生成数据以制作带有中线的直方图。在这里,我们将使用 Numpy 从正态分布生成随机数并创建熊猫数据框。

蟒蛇3

# generating data
np.random.seed(42)
df = pd.DataFrame({'height': np.random.normal(150, 10, 1000)})

基本上这里我们倾向于构建带有中线的条形图,它可以产生两层双星图像对象并将它们组合起来。使用 Altair 的图表函数,我们创建了数据数据框的基础图。

蟒蛇3

# initialize chart
base=alt.Chart(df)

现在我们使用 Altair 的mark_bar()函数并创建基础对象来制作直方图。此外,在这里我们提到我们有兴趣制作直方图的变量。

蟒蛇3

# generate histogram
hist = base.mark_bar().encode(
    x=alt.X('height:Q', bin=alt.BinParams(), axis=None), y='count()')

使用 Altair 库中的mark_rule()函数,我们再次使用基础对象和数据来创建一条中线。

蟒蛇3

# generate median line
median_line = base.mark_rule().encode(
    x=alt.X('mean(height):Q', title='Height'), size=alt.value(5))

现在为了形成具有中线的基本直方图,我们倾向于仅将条形图对象和中线对象组合如下:

蟒蛇3

# depict illustration
hist+median_line

输出:

因此,这里我们在Python中使用 Altair 得到带有中线的直方图。

现在让我们了解如何获得自定义直方图。

使用 Altair 自定义带有中线的直方图

在带有中线的基本直方图中,Altair 库使用默认参数绘制直方图。例如,Altair 为直方图选择了蓝色,并为我们选择了 bin 数量。同样,Altair 为中线选择了黑色。但是我们可以使用 Altair 轻松自定义带有中线的直方图。

首先,我们将增加直方图中的 bin 数量,然后我们将中线的颜色更改为红色。

我们将在坐标轴参数中使用maxbins=100参数,以形成具有 100 个 bin 的直方图。然后我们可以在mark_rule()函数中使用color=red将中线的颜色更改为红色。最后,让我们结合直方图和中线对象。然后我们将在 Altair 中使用中线改进直方图的版本。

蟒蛇3

# import required modules
import altair as alt
import numpy as np
import pandas as pd
  
# generating data
np.random.seed(42)
df = pd.DataFrame({'height': np.random.normal(150, 10, 1000)})
  
# initialize chart
base = alt.Chart(df)
  
# generate histogram
hist = base.mark_bar().encode(
    x=alt.X('height:Q', bin=alt.BinParams(maxbins=100), axis=None), y='count()')
  
# generate median line
red_median_line = base.mark_rule(color='red').encode(
    x=alt.X('mean(height):Q', title='Height'), size=alt.value(5))
  
# depict illustration
hist+red_median_line

输出:

因此,上图显示了在Python中使用 Altair 的具有 100 个 bin 和红色中线的直方图。