pyrochlore / obsidian-tracker

A plugin tracks occurrences and numbers in your notes
MIT License
1.36k stars 230 forks source link

Threshold is Ignored in Month Graphs When Using Scaled Colors #364

Open mkarrmann opened 5 months ago

mkarrmann commented 5 months ago

Expected Behavior

The threshold parameter for month graphs has consistent behavior, regardless of whether circleColorByValue is set.

Current Behavior

The threshold field for month graphs does nothing when circleColorByValue (along with yMin and yMax) are set.

Possible Solution

The block of code I link below to const showCircle = curValue != null && curValue > threshold;. This should be the sole consideration for whether a value is set/

Steps to Reproduce (for bugs)

Create a tracker of type month with parameters similar to this:

searchType: frontmatter
searchTarget: snoozed mins
folder: /General/Periodic/Daily
datasetName: Meditation Minutes
month:
    mode: circle
    circleColorByValue: true
    yMin: 00
    yMax: 100
    threshold: 0

In a note, set the value equal to 0 for a day. Note that the circle still appears.

Context

This isn't exactly a bug, since from the code it's clear this is completely intentional:

https://github.com/pyrochlore/obsidian-tracker/blob/3550d12f79253ec1d06a94fb70ce469c2f0eccb5/src/month.ts#L646-L665

It was added in this commit which made a handful of changes.

However, I can't think of any convincing reason why this behavior should be in place. I found it very surprising to set a threshold and find that it had no effect. While obviously the color will give me a sense of whether the value is near the threshold, in some situations I may care a lot of about the value being exactly 0 vs. it being very small.

The best argument I can think of for this current behavior is: "Many people don't set any threshold, in which they are not expecting there to be any threshold. So, it is surprising to the user when they try using circleColorByValue with a yMin beneath the default value of threshold (0) and find that the circle don't appear". However, this isn't problem isn't specific to using circleColorByValue, and actually the core problem is that the default value of threshold is 0 instead of "no threshold" (but I know that making that change would be something of a breaking change, and potentially annoying for some users).