Evolution of pace in specific HR zone over time plot

I would like to see how a runner’s pace evolves over time, but only in a specific HR zone.

Specifically: Average pace when running in HR zone2 over time.

I don’t seem to find a good way to clearly plot this.

Any ideas or tips?


This is exactly what I have been looking for too. I can see by comparing older runs that my pace at a given HR zone is clearly improving, but it would be so nice to see it in a clear overview.


Would this do the trick?

Edit: This is not it.

1 Like

Maybe you can create a custom activity field for Pace in Z2 and plot that on the fitness page.

1 Like

Yes a custom activity field will work. I was busy creating one and then I noticed @Matheus_Silva already published one (thanks!):

Matheus’s version checks the time in HR zones to make sure the run actually looks like a Z2 run (neat!).

Matheus your version only considers “Run”. Intervals.icu now also has trail run and virtual run so maybe do:

if (activity.type.indexOf('Run') >= 0) { ... }

Also there is an out by 1 error in the HR range check. The max HR for Z2 is activity.icu_hr_zones[1].

This is the code for my attempt:

  let heartrate = icu.streams.fixed_heartrate
  let velocity = icu.streams.velocity_smooth
  // activity.icu_hr_zones = max HR for each zone (index 0 = Z1, index 1 = Z2 etc.)
  let z2Min = activity.icu_hr_zones[0] + 1
  let z2Max = activity.icu_hr_zones[1]
  let tot = 0.0, c = 0
  for (let i = 0; i < heartrate.length; i++) {
    let bpm = heartrate[i]
    let mps = velocity[i]
    if (bpm >= z2Min && bpm <= z2Max && mps > 0) {
      tot += mps
  c ? tot/c : null

That custom field looks exactly what I need.
Is there an easy way (I bet there is) to calculate this retroactively for past runs in bulk?

Edit: I found how to do it activity per activity. If there is a way to do it in bulk, that would be nice though.

And just another question when using this custom field on a plot in the fitness page: the axis does not automatically scale to the values:

How can I fix that?

I fixed that bug yesterday. You probably need to delete the plots and re-add them to the chart to see the fix.

You can bulk re-analyze activities from the list view:

1 Like

Great info and thanks for the bugfix!

Keep up the good work. :muscle::raised_hands:

Hi David,

It seems that the bug is still not completely fixed: the units are good, but the scaling does not match the values: there is a big part on the underside of the plot that is empty.

I added @Matheus_Silva’s chart but the chart is blank. Any ideas why?

Indeed, mine too.