如何使用 Altair 在Python中制作重叠直方图?
先决条件:牛郎星
直方图表示在某些组的排序期间提供的数据。它是一种精确的图形表示数值数据分布的方法。它是一种条形图,其中 X 轴表示 bin 范围,而 Y 轴提供有关频率的信息。
使用 Altair,我们可以根据宽格式或长整齐格式的数据制作重叠直方图或分层直方图。
程序
这对两种形式都是通用的:
- 导入库
- 导入或创建数据。
- 根据方法使数据长/宽。
- 绘制直方图。
方法一:整理表格
- 为了使用 Altair 制作直方图,我们使用了 mark_area()函数。在这里,我们使用 opacity 参数指定透明度级别,因此创建直方图的关键参数是 interpolate='step'。否则,直方图将显示为 Altair 的面积图。
- 然后我们指定变量,因此指定 bin 的数量。为了区分不同的图,alt.Color() 与特定变量一起使用,如多个直方图。
例子 :
Python3
# importing libraries
import pandas as pd
import altair as alt
import numpy as np
np.random.seed(42)
# creating data
df = pd.DataFrame({'Col A': np.random.normal(-1, 1, 1000),
'Col B': np.random.normal(0, 1, 1000)})
# Overlapping Histograms
alt.Chart(pd.melt(df,
id_vars=df.index.name,
value_vars=df.columns,
var_name='Columns',
value_name='Values')
).mark_area(opacity=0.5,
interpolate='step'
).encode(
alt.X('Values', bin=alt.Bin(maxbins=10)),
alt.Y('count()', stack=None),
alt.Color('Columns')
).add_selection(alt.selection_interval(encodings=['x']))
Python3
# importing libraries
import pandas as pd
import altair as alt
import numpy as np
np.random.seed(42)
# creating data
df = pd.DataFrame({'Col 1': np.random.normal(-1, 1, 1000),
'Col 2': np.random.normal(0, 1, 1000)})
# Overlapping Histograms
alt.Chart(df).transform_fold(
['Col 1', 'Col 2'],
as_=['Columns', 'Values']
).mark_area(
opacity=0.5,
interpolate='step'
).encode(
alt.X('Values:Q', bin=alt.Bin(maxbins=100)),
alt.Y('count()', stack=None),
alt.Color('Columns:N')
)
输出:
方法二:宽幅
- 通常,您可能会从宽格式的数据开始。 Altair 具有 transform_fold()函数,可以将宽格式的数据转换为整齐的长格式。这允许我们不使用 Pandas 的melt()函数,而是让我们在 Altair 内传输信息。
- 我们指定了重塑所需的变量名称,并在整洁的数据中为跨越新变量的品牌命名。
例子 :
蟒蛇3
# importing libraries
import pandas as pd
import altair as alt
import numpy as np
np.random.seed(42)
# creating data
df = pd.DataFrame({'Col 1': np.random.normal(-1, 1, 1000),
'Col 2': np.random.normal(0, 1, 1000)})
# Overlapping Histograms
alt.Chart(df).transform_fold(
['Col 1', 'Col 2'],
as_=['Columns', 'Values']
).mark_area(
opacity=0.5,
interpolate='step'
).encode(
alt.X('Values:Q', bin=alt.Bin(maxbins=100)),
alt.Y('count()', stack=None),
alt.Color('Columns:N')
)
输出 :