The power tab provides an excellent data point in the power @ n (n = hr at LT1 ceiling based on the data in zones table). I want to track that metric in the timeline, but cannot see how to do it
There are other charts that are similar and useful, like the compare chart that lets you select hr and then power compared to previous seasons. There’s also the efficiency charts and the hr/power charts.
It seems it would be straightforward, since the metric is already calculated on the power page, so am I missing something?
1 Like
I ended up working it out and solution for interested folks is below:
Note: I find that the LT1 hr / Max Z2 hr is only touched on a few of my rides, since I do a lot of <LT1 or Z2 riding and avoid the top of the zone, so I dropped the target hr down to one that’s more common for me and then made it +/- 2bpm. So the chart has a target of 127bpm and picks up 125–129 bpm and calculates the power in that range, which you can then plot on a custom chart.
You’ll need to just edit the Script to match your own target Z2 hr, by replacing where I’ve got “127,” with whatever yours is.
You will need to reprocess files to get the new chart to show data, I just reprocessed a year (go to Activities, then view by columns, set range to 1 year, select the top empty check box and all the rides will be selected, then Edit → “Reprocess File”).
Instructions
Settings → Custom Fields → Add field
Name: [whatever]; Units: W; Type: Numeric; [everything else is just default on that page]
Description: (you can write anything)
Script: paste script below (edit the number “127 bpm” for your own target hr for which you want to track power)
// Power @ 127 bpm --- LT1 proxy
hr_target = 127
hr_range = 2 // use +- 2 bpm
min_power = 80 // ignore coasting / stops
min_points = 120 // require at least 2 min of valid data
hrStr = streams.get("fixed_heartrate").data
pwrStr = streams.get("fixed_watts").data
count = 0
sumPower = 0
for (let i = 0; i < hrStr.length; i++) {
hr = hrStr[i]
pwr = pwrStr[i]
if (hr >= hr_target - hr_range &&
hr <= hr_target + hr_range &&
pwr >= min_power) {
count++
sumPower += pwr
}
}
if (count >= min_points) {
sumPower / count
} else {
null
}

Hello @Jamie_Smith
Thanks for sharing this. I kept this open in a browser tab since you posted, until I had some time to test it, as it’s a feature I’m quite interested in.
Unfortunately, for some reason it didn’t work on any of the activities I tried. I don’t want to do a bulk reprocess because I have many activities with manual edits (and unfortunately we still have to lose all those edits just to benefit from new features), but I tested it on several activities that spend a lot of time moving between the top of Z2 and the lower part of Z3, and the results remained unchanged.