Axes
Axes are the ticked rulers on the plot edges. Bokeh creates sensible defaults, but you can style them heavily: tick formatting, labels, gridlines, orientation, and even multiple axes on one plot. The axis objects live on p.x.axis / p.y.axis (LinearAxis, CategoricalAxis, DatetimeAxis, LogAxis).
Axis Labels and Title
from bokeh.plotting import figure
p = figure(title="Sales", x_axis_label="Month", y_axis_label="Units sold")
p.circle([1, 2, 3], [10, 20, 15])
Tick Formatting
import numpy as np
from bokeh.plotting import figure
from bokeh.models import NumeralTickFormatter, BasicTickFormatter
p = figure()
# thousands separator on the y axis
p.y.axis.formatter = NumeralTickFormatter(format="0,0")
# percentage on x (values 0..1)
p.xaxis[0].formatter = NumeralTickFormatter(format="0%")
# fixed number of ticks
from bokeh.models import FixedTickFormatter
p.x_axis.major_label_overangle = 90
p.xaxis[0].formatter = FixedTickFormatter(ticks=["A", "B", "C"])
Gridlines
p.grid.grid_line_color = "#e2e8f0"
p.grid.grid_line_alpha = 0.5
p.grid.grid_line_dash = [4, 4]
# or disable entirely:
p.grid.grid_line_color = None
Datetime Axes
from bokeh.plotting import figure
from bokeh.models import DatetimeAxis, BasicTickFormatter
import datetime
dates = [datetime.datetime(2026, 1, d) for d in range(1, 32)]
p = figure(x_axis_type="datetime")
p.circle(dates, [1, 2, 3] * 10 + [1, 2])
p.xaxis[0].formatter = BasicTickFormatter(format="%d %b")
Log Scale Axes
p = figure(x_axis_type="log", y_axis_type="log")
p.scatter([1, 10, 100], [1, 100, 1000], size=8)
Summary
Style Bokeh axes through the axis objects: set axis labels with figure(x_axis_label=...), format ticks with NumeralTickFormatter/FixedTickFormatter/DatetimeAxis formatters, adjust gridline color and dash, and choose axis types (datetime, log, categorical) at figure creation. These controls turn default plots into publication-ready charts.