Graph: Y-axis scaling for HR and cadence

Currently the power, HR and cadence all share the same Y axis, the limits of which are set automatically. As a result, people with low FTP can read their HR well in the graph, while people with higher FTP are left with very little resolution in the Y-direction.

I pulled up some random Mills workouts from different users, using the “all rides” functionality:


Note that the second person can more easily see the HR variation.

My proposal would be to:

  • add a HR/Cadence 2x checkbox

  • This changes the legend labels in the top: Heart rate -> Heart rate (2x)

  • HR and cadence (red & white) curve are multiplied by 2 -> pane with details on mouseover still gives the actual (unscaled) numbers of course.

  • make the default setting for the checkbox a profile setting. Anyone with FTP > 250W probably always wants this turned on.

To me it seems natural to use the available space in the Y-direction for showing the results. Now the HR and cadence data is so squeezed in a tight vertical space, simply because HR will generally be between 100-200, while our power can spike much more. Would be great to see HR changes more clearly!

ps: a more general possibility would be to allow the user to 1) set the min/max Y-limits, 2) adding a right Y-axis (again with min/max edit box), 3) being able to assign properties to each axis (e.g. assign only HR to right Y-axis and set Y-axis limits for HR). You could still write an algo to automatically reuse the current horizontal grid lines for left and right axis. This would give more freedom but it is clearly a bridge too far. The suggestion I made above seems to me to be the “80% of the results for 20% of the effort” option.


Thanks for taking the time to share your feature request; you bring up a very good point.

I have shared your request with the team for consideration :+1:.


Thanks Bryce, it’s great having this direct connection. :slightly_smiling_face: :slightly_smiling_face:

It’s funny, I thought there was some clever science going on to ensure that my HR plot during rest intervals usually dropped (by design) to align with the power plot … but I realise now it’s just coincidence. It’s become a weird obsession of mine, so when they *don’t * line up it freaks me out :grinning:

I have to admit this is super funny!!! Because it would mean either A) TR has to lie about your power or HR, B) has to modify requested power to get HR to move closer to target power during rest, in a feedback loop. (which it doesn’t, as far as we know. But under the hood TR could do this and lie about the requested power. That would be pernicious. It’s a good thing you and I don’t write this kind of SW).

1 Like

Hi, sorry to revive an old thread but is there any update on this? I’m a relatively new user and the squashed HR scale was one of the first things I noticed during my first workout. To this non-coder it seems like it would be quite an easy feature to integrate, but what do I know. Definitely co-sign the feature request, though! :slight_smile:

1 Like

Hi Bryce, I’m also curious! :slight_smile:

@IvyAudrain is the new @Bryce :wink:


This feature is not on our roadmap as of right now, apologies. While there is space in the Y-axis, I can see how that would also result in a somewhat ‘cluttered’ view from a visibility standpoint, but I also wonder if part of it is that the team is less likely to invest in prioritizing heart rate as a reliable training metric for reasons identified here: Power vs. Heart Rate – TrainerRoad

There’s always the live-reading of HR on the workout screen, and for clearer analysis after the ride, you can always deselect everything except HR (as shown below) to isolate and compare to power/cadence/etc!

Thanks. Agree that HR shouldn’t be the primary training metric, but I do think it is very useful to be able to see the effect of intervals on HR in real time – especially in instances when they’re done seated vs standing, early-workout vs late-workout, etc. I think a shared HR/cadence scale on the right Y-axis, and power scale on the left Y-axis – both based on a rider’s actual ranges – would be a simple, uncluttered fix. Anyway thanks again for the response and I do hope it gets some consideration. You folks do a great job!

1 Like

Hi Ivy,

I’m not sure I understand your “cluttered view” comment. Do you mean the HR and power overlap too much for users with FTP < 200 or above 200? Now it depends on your FTP if you’re able to read your HR. With high powers the HR becomes totally squeezed. How does this related to the cluttered comment?

Just selecting HR doesn’t help, the issue is having enough vertical resolution to read the HR variation itself. With HR totally squeezed that doesn’t work.

Lastly, HR info is immensely valuable, even if not used as a direct training metric. That is why you choose to plot it with HR and cadence, right?

I hope it gets some consideration, because for people with FTP > 200, I feel the HR plot is really subpar currently. Low hanging fruit!

1 Like

Sure! I think to better speak to that, there are so many good ideas that we’d love to add when considering feature requests internally. Ultimately, we have to prioritize these ideas based on how impactful they are to all of our athletes, and sometimes that means deprioritizing or passing over a good idea, that IS good, so that we can spend our development resources on something that will be more impactful immediately in helping athletes get faster!
Hope that context helps a bit. We’ve had a good winter (in terms of development) and we’re going to expand the engineering team over the next couple of months to help implement ‘low hanging fruit’ like this if it makes sense. :+1:

It’s really not that hard… Everyone else does it. Auto-scaling, separate y-axis for each variable. Any graphing object lib will have that.


In that example, how do you know which vert axis is associated with which graph data?

Seems it’s missing some clarity via color, labels or some method to make it very clear without digging (Right side double verts seems unclear to me).

As with most of these, y-axis is in order of variables listed in the legend (Excel does exactly the same in their graph package). And mouse-over shows details of all variables (same as TR, Zwift, …), making the actual axis not that important in real life.

I’m not intelligent enough to do a screen capture with the mouse-over active.

1 Like

OK, but if the overall goal here is to get easier to understand data, having to use mouse overs and such are kind of a funny solution to me.

I am no visual data expert, but having the info as clearly presented, front and center, without extra steps seems a worthy goal. Colors, symbols and location are key for quick understanding (and sidesteps language issues to some degree). Knowing the order is associated is good. But it is totally offset on the screen and not quite obvious IMO.

At this point, the screen shot is about as confusing as any other with a single vert axis (maybe even more so since you can’t tell what is associated without extra work).

If the goal is “easy”, make it “easy” by default.

1 Like

The TR graph is not really usable without using the mouse-over, either by the way. There’s no real way of telling what my power was in that last segment at the end - unless you use the mouse-over. The y-axis labeling is the last thing you’ll use.


Sure, and I’m not saying the TR option is the best option either.

There’s an issue overall and I haven’t seen one that really ticks all the boxes yet.

1 Like

Well, the HR is not gonna be 220 for minutes or between 90 and 110 :wink:

1 Like

If you just color the axislabel with the color of the curve you’re done. It is really that simple.
Now that we’re discussing clarity, in 85%+ of the workouts I’ll never go more than 20% above FTP, while TR chooses to plot all the way up to 200%. Again wasting a lot of vertical real estate. And I can’t resize the graph in the Y direction to use the full size of my screen either.

So my HR during exercise will be in the 120-180 range, while the graph goes from 0 → 600W. There is just no space to really read it.

Edit: rereading my post I sound way too sour. Let me be clear, I love TR, and this is just a small item :wink: