Download notebook (.ipynb)

break_width Parameter in Time (Duration) Scales#

In time scales, the break_width parameter accepts a string specifying the interval between breaks, e.g., “6 hours”, “30 min”, “500 ms”.

import numpy as np

from lets_plot import *
LetsPlot.setup_html()
MS = 1
SECOND = 1000 * MS
MINUTE = 60 * SECOND
HOUR = 60 * MINUTE
DAY = 24 * HOUR

# Generate 12 hours of data
np.random.seed(42)
time = list(range(0, 12 * HOUR, 15 * MINUTE))
value = np.cumsum(np.random.normal(0, 1, len(time)))
data = {'time': time, 'value': value}

# Automatic breaks (default)
ggplot(data, aes('time', 'value')) + geom_line() + scale_x_time() + ggtitle('Automatic breaks')
# Fixed breaks: 1 hour
ggplot(data, aes('time', 'value')) + geom_line() + scale_x_time(break_width='1 hour') + ggtitle('break_width = "1 hour"')
# Fixed breaks: 2 hours
ggplot(data, aes('time', 'value')) + geom_line() + scale_x_time(break_width='2 hours') + ggtitle('break_width = "2 hours"')
# Fixed breaks: 30 minutes
ggplot(data, aes('time', 'value')) + geom_line() + scale_x_time(break_width='30 minutes') + ggtitle('break_width = "30 minutes"')
# Y-axis with break_width
ggplot(data, aes('value', 'time')) + geom_line() + scale_y_time(break_width='2 hours') + ggtitle('scale_y_time with break_width = "2 hours"')
# Short range: seconds
time_sec = list(range(0, 2 * MINUTE, SECOND))
value_sec = np.cumsum(np.random.normal(0, 1, len(time_sec)))
data_sec = {'time': time_sec, 'value': value_sec}

ggplot(data_sec, aes('time', 'value')) + geom_line() + scale_x_time(break_width='15 seconds') + ggtitle('break_width = "15 seconds"')
# Long range: days
time_days = list(range(0, 14 * DAY, 6 * HOUR))
value_days = np.cumsum(np.random.normal(0, 1, len(time_days)))
data_days = {'time': time_days, 'value': value_days}

ggplot(data_days, aes('time', 'value')) + geom_line() + scale_x_time(break_width='1 day') + ggtitle('break_width = "1 day"')
# 1 week breaks
ggplot(data_days, aes('time', 'value')) + geom_line() + scale_x_time(break_width='1 week') + ggtitle('break_width = "1 week"')