Altair:控制分箱轴的刻度计数

Altair: Controlling tick counts for binned axis

我正在尝试在 Altair 中生成直方图,但我无法控制与分级变量(x 轴)对应的轴的刻度计数。我是 Altair 的新手,所以很抱歉我在这里遗漏了一些明显的东西。我试图寻找其他人是否遇到过此类问题,但没有找到完全匹配的结果。

生成直方图的代码是

alt.Chart(df_test).mark_bar().encode(
    x=alt.X('x:Q', bin=alt.Bin(step=0.1), scale=alt.Scale(domain=[8.9, 11.6])),
    y=alt.Y('count(y):Q', title='Count(Y)')
).configure_axis(labelLimit=0, tickCount=3)

df_test 是一个 Pandas 数据框 - 可用的数据 here.

上面的代码生成了下面的直方图。更改 tickCount 会更改 y 轴刻度计数,但不会更改 x 轴。

感谢任何指导。

使用 bin= 可能有更方便的方法来执行此操作,但一种方法是将 transform_binmark_rect 一起使用,因为这不会将轴更改为分箱轴(更难定制):

import altair as alt
from vega_datasets import data

source = data.movies.url

alt.Chart(source).mark_rect(stroke='white').encode(
    x=alt.X('x1:Q', title='IMDB Rating', axis=alt.Axis(tickCount=3)),
    x2='x2:Q',
    y='count()',
).transform_bin(
    ['x1', 'x2'], field='IMDB_Rating'
)

您可能会注意到您没有得到准确的刻度数,这是因为四舍五入到“不错”的值,例如 5 的倍数等。即使设置 nice=False,所以在这些情况下,另一种方法是传递精确的刻度值 values=

alt.Chart(source).mark_rect(stroke='white').encode(
    x=alt.X('x1:Q', title='IMDB Rating', axis=alt.Axis(values=[0, 3, 6, 9])),
    x2='x2:Q',
    y='count()',
).transform_bin(
    ['x1', 'x2'], field='IMDB_Rating'
)

小心十进制值,它们会自动显示为整数(即​​使使用 tickRound=False),但位置错误(这对我来说似乎是一个错误,所以如果您进一步调查它,您可能想要关于 Vega Lite 问题跟踪器的报告。