Python Altair如何在不更改轴刻度的情况下存储直方图数据

2024-05-13 01:24:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在altair中,如何在不改变轴刻度的情况下制作柱状图?当我尝试对数据进行装箱时,轴刻度不再延伸到直方图中的数据之外。我希望箱子和轴刻度分开计算

下面的代码是一个简单的示例,试图显示测量公差范围内的限制,以查看通过或失败的测量数量

import numpy as np
import pandas as pd
import altair as alt



nominal = 0.500
tolerance = 0.011
limits = pd.DataFrame({'x_limits' : [nominal - tolerance, nominal + tolerance]})

data = pd.DataFrame({'x_data' : np.random.normal(0.520, 0.002, 100)})



layers = []

layers.append(alt.Chart(data)
         .mark_bar()
         .encode(x = alt.X('x_data', bin = alt.Bin(nice = False)), y = 'count()'))

layers.append(alt.Chart(limits)
         .mark_rule()
         .encode(x = 'x_limits'))

chart = alt.layer(*layers)

输出仅在直方图箱下方的X轴上显示刻度,并且它们在公差限制的规则之前停止


Tags: 数据importdatalayersasnp直方图alt
2条回答

我能够通过使用mark_rect而不是mark_bar绘制直方图来解决这个问题。直接使用transform_bin可以分别获得每个bin的开始和结束(在本例中为xx2)。然后,在比例中设置zero = False使边界像以前一样适合数据

layers.append(alt.Chart(data)
.mark_rect()
.transform_bin(as_ = ['x', 'x2'], field = 'x_data')
.encode(x = alt.X('x:Q', scale = {'zero':False}), x2 = 'x2:Q', y = 'count()'))

对于装箱轴,我认为需要设置箱子的范围以控制轴标签。在这种情况下,设置alt.Bin(maxbins=50, extent=(0.48, 0.54)))将提供:

enter image description here

相关问题 更多 >