stephan
stephan

Reputation: 456

Controlling Bin Widths in Altair

I have a set of numbers that I'd like to plot on a histogram.

Say:

import numpy as np
import matplotlib.pyplot as plt

my_numbers = np.random.normal(size = 1000)
plt.hist(my_numbers)

If I want to control the size and range of the bins I could do this:

plt.hist(my_numbers, bins=np.arange(-4,4.5,0.5))

Now, if I want to plot a histogram in Altair the code below will do, but how do I control the size and range of the bins in Altair?

import pandas as pd
import altair as alt

my_numbers_df = pd.DataFrame.from_dict({'Integers': my_numbers})

alt.Chart(my_numbers_df).mark_bar().encode(
    alt.X("Integers", bin = True),
    y = 'count()',
)

I have searched Altair's docs but all their explanations and sample charts (that I could find) just said bin = True with no further modification.

Appreciate any pointers :)

Upvotes: 13

Views: 11285

Answers (1)

jakevdp
jakevdp

Reputation: 86328

As demonstrated briefly in the Bin transforms section of the documentation, you can pass an alt.Bin() instance to fine-tune the binning parameters.

The equivalent of your matplotlib histogram would be something like this:

alt.Chart(my_numbers_df).mark_bar().encode(
    alt.X("Integers", bin=alt.Bin(extent=[-4, 4], step=0.5)),
    y='count()',
)

enter image description here

Upvotes: 19

Related Questions