# Plotting custom Power Frequency Distribution Chart for activities

Hello

I would like to plot a Power Frequency Distribution Chart similar to what Allen, Coggan, and Mcgregor (3rd Edition) show on page 28 in Fig. 3.1

Intervals.icu does some like this already but I need smaller Intervals for the bars (e.g. steps for 5W, 10W etc.).

A script to create a custom chart would be highly appreciated.

Here is a start. It assumes your data has 1 second per point and uses a 5 second moving average of power (power data is spikey). Intervals.icu calculates these things on an interpolated power stream with 1 second per tick. I need to make that available to scripts to do this properly.

``````{
let watts = icu.streams.fixed_watts
let maxWatts = 0
for (let w of watts) if (w > maxWatts) maxWatts = w
let bucketSize = 5
let buckets = []
let x = []
for (let i = 0; i <= (maxWatts / bucketSize); i++) {
buckets.push(0)
x.push(i * bucketSize)
}
let totWatts = 0
let window = 5
for (let i = 0; i < window; i++) if (watts[i]) totWatts += watts[i]
for (let i = window; i < watts.length; i++) {
let w = totWatts / window
let bucket = Math.floor(w / bucketSize)
buckets[bucket] += w
if (watts[i]) totWatts += watts[i]
if (watts[i - window]) totWatts -= watts[i - window]
}

let data = [
{
x: x,
y: buckets,
type: 'bar',
marker: {
color: '#63c',
opacity: 0.7
}
}
]

let layout = {
title: {
text: "Time in " + bucketSize + "w buckets"
},
margin: {
l: 30,
r: 20,
t: 20,
b: 30
}
}

chart = { data, layout }
}
``````