breakWidth Parameter in Time (Duration) Scales¶
In time scales, the breakWidth parameter accepts a string specifying the interval between breaks, e.g., "6 hours", "30 min", "500 ms".
In [1]:
%useLatestDescriptors
%use lets-plot
In [2]:
val MS = 1L
val SECOND = 1000 * MS
val MINUTE = 60 * SECOND
val HOUR = 60 * MINUTE
val DAY = 24 * HOUR
// Generate 12 hours of data at 15-minute intervals
val rand = java.util.Random(11)
val time = (0 until 12 * HOUR step 15 * MINUTE).toList()
var cumSum = 0.0
val value = List(time.size) { cumSum += rand.nextGaussian(); cumSum }
val data = mapOf("time" to time, "value" to value)
In [3]:
// Automatic breaks (default)
letsPlot(data) { x = "time"; y = "value" } +
geomLine() +
scaleXTime() +
ggtitle("Automatic breaks")
Out[3]:
In [4]:
// Fixed breaks: 1 hour
letsPlot(data) { x = "time"; y = "value" } +
geomLine() +
scaleXTime(breakWidth = "1 hour") +
ggtitle("breakWidth = \"1 hour\"")
Out[4]:
In [5]:
// Fixed breaks: 2 hours
letsPlot(data) { x = "time"; y = "value" } +
geomLine() +
scaleXTime(breakWidth = "2 hours") +
ggtitle("breakWidth = \"2 hours\"")
Out[5]:
In [6]:
// Fixed breaks: 30 minutes
letsPlot(data) { x = "time"; y = "value" } +
geomLine() +
scaleXTime(breakWidth = "30 minutes") +
ggtitle("breakWidth = \"30 minutes\"")
Out[6]:
In [7]:
// Y-axis with breakWidth
letsPlot(data) { x = "value"; y = "time" } +
geomLine() +
scaleYTime(breakWidth = "2 hours") +
ggtitle("scaleYTime with breakWidth = \"2 hours\"")
Out[7]:
In [8]:
// Short range: seconds
val timeSec = (0 until 2 * MINUTE step SECOND).toList()
var cumSumSec = 0.0
val valueSec = List(timeSec.size) { cumSumSec += rand.nextGaussian(); cumSumSec }
val dataSec = mapOf("time" to timeSec, "value" to valueSec)
letsPlot(dataSec) { x = "time"; y = "value" } +
geomLine() +
scaleXTime(breakWidth = "15 seconds") +
ggtitle("breakWidth = \"15 seconds\"")
Out[8]:
In [9]:
// Long range: days
val timeDays = (0 until 14 * DAY step 6 * HOUR).toList()
var cumSumDays = 0.0
val valueDays = List(timeDays.size) { cumSumDays += rand.nextGaussian(); cumSumDays }
val dataDays = mapOf("time" to timeDays, "value" to valueDays)
letsPlot(dataDays) { x = "time"; y = "value" } +
geomLine() +
scaleXTime(breakWidth = "1 day") +
ggtitle("breakWidth = \"1 day\"")
Out[9]:
In [10]:
// 1 week breaks
letsPlot(dataDays) { x = "time"; y = "value" } +
geomLine() +
scaleXTime(breakWidth = "1 week") +
ggtitle("breakWidth = \"1 week\"")
Out[10]: