Setting which points igor decides to skip in "sparse markers"

When preparing my graph, I often use lines and markers mode with sparse markers.

However, the problem I'm having is that igor seems to decide which points to skip based on the current scaling of the axis. Part of my traces are always off screen because they're ignored. I could trim the waves not to include these points, but that seem excessive to solve this problem.

It seems to be that igor sets the first marker at the first point visible on the graph dynamically. So since my Y axis is scaled 0-N, the first point above zero will get a marker. For some of my traces that's point 10, and for some it's point 11. Now, that generally wouldn't be a problem, except I want to color every 10th point (decades) using the "colorize as f(z)" options. I've done this successfully many times, but for graphs that have multiple traces on them, it gets difficult.

I think the easiest way would be to set my y axis so that all of my traces have point X visible. But this doesn't work because of the dynamic shifting of the chosen sparse markers. Is there an easier way to do this? Can I tell igor which point to start sparse markers at?

EDIT: Yes, another option would be to have another trace with just the markers I want to color differently, but that gets difficult due to a few other reasons. (Many, many traces already, doesn't work with my colorize program, each trace has a different marker so the overlaying ones would have to be the same, etc.)

The first image below shows how I've successfully implemented this on single trace graphs. I sort of cheated the system since I have a set color pallet that I use for my publications, and it didn't match any of the color tables, so I just set the starting color value and ending color value to be between the two values on the f(z) wave, then I set the "before first color" and "after last color" to the colors I wanted. Yes, I probably could have made a color table and used that... this was easier.

This is what I get. On the one trace it works fine, but on the second trace it is off by one, so the different colored part (in green for ease of identification) is not on the markers.

https://s31.postimg.org/gp1l7imqj/Screen_Shot_2016_07_29_at_10_42_01_AM…
One possible workaround is to use marker size as f(z) instead of sparse markers. You'll need to create one extra wave that encodes which points should have the larger visible markers; for example, a wave that's mostly zeros but set to 1 every 10th point that corresponds to the frequencies you want. Then set the Z marker size using that extra wave.

For example, if your data wave is wave0 and this auxiliary wave is wave1, you could do this programmatically or on the command line using:
ModifyGraph zmrkSize(wave0)={wave1,*,*,1,4}

The downside is that the minimum marker size of 1 may still be visible, so you'd have to make the line size larger.
Ah, that is an interesting way to do it, but you are correct, the marker size of 1 is still visible and making the lines larger really isn't an option. (It crowds the graph.) I do already have that wave, I'd just need to change the values.
reepingk wrote:
The marker size of 1 is still visible and making the lines larger really isn't an option.


Turns out that if you set the marker type to a value above 62, they disappear (there's no built-in markers above that number at least in Igor 6). So, instead of using the auxiliary wave to set the marker size, use it to set the marker number instead. You should fill that wave (in my example "wave1") with number 19 where you want a circle and some large value (e.g. 100) where you want no marker. Then set:
ModifyGraph zmrkNum(wave0)={wave1}
ajleenheer wrote:
reepingk wrote:
The marker size of 1 is still visible and making the lines larger really isn't an option.


Turns out that if you set the marker type to a value above 62, they disappear (there's no built-in markers above that number at least in Igor 6). So, instead of using the auxiliary wave to set the marker size, use it to set the marker number instead. You should fill that wave (in my example "wave1") with number 19 where you want a circle and some large value (e.g. 100) where you want no marker. Then set:
ModifyGraph zmrkNum(wave0)={wave1}

If you set the marker number to NaN, you won't get a marker. Using larger values is probably ok, but technically speaking those marker numbers could be used for custom marker hook functions. See the following for more information:
DisplayHelpTopic "Custom Marker Hook Functions"
ajleenheer wrote:
reepingk wrote:
The marker size of 1 is still visible and making the lines larger really isn't an option.


Turns out that if you set the marker type to a value above 62, they disappear (there's no built-in markers above that number at least in Igor 6). So, instead of using the auxiliary wave to set the marker size, use it to set the marker number instead. You should fill that wave (in my example "wave1") with number 19 where you want a circle and some large value (e.g. 100) where you want no marker. Then set:
ModifyGraph zmrkNum(wave0)={wave1}


Thanks ajleenheer. That'll work wonderfully and is easy to implement. I really wanted to avoid changing my data, and this allows me to do that.

Oh and aclight, thank you, I will probably use NaN instead, just to be compatible with future versions of igor which may have more than 62 markers.
What you really need is a mask wave. Using a mask wave you have ultimate control over which points in a wave are displayed. See the mask keyword for ModifyGraph: DisplayHelpTopic "ModifyGraph for Traces".

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
reepingk wrote:


Oh and aclight, thank you, I will probably use NaN instead, just to be compatible with future versions of igor which may have more than 62 markers.


Custom marker hook functions have been supported for years now (sometime during Igor 6), so this isn't just about future versions. There are probably only a few people using this feature, but best to write the code right from the beginning.
johnweeks wrote:
What you really need is a mask wave. Using a mask wave you have ultimate control over which points in a wave are displayed. See the mask keyword for ModifyGraph: DisplayHelpTopic "ModifyGraph for Traces".

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com


Ah yes, this is the correct way to do it, although we were essentially doing it this way already. Thank you all.
johnweeks wrote:
What you really need is a mask wave. Using a mask wave you have ultimate control over which points in a wave are displayed. See the mask keyword for ModifyGraph: DisplayHelpTopic "ModifyGraph for Traces".

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com



Actually, this doesn't work for my application. While yes, it does mask the correct points, it basically just deletes those points off of the graph, only using half of my data. That's... not good. I wanted the markers to be sparse, not my data! Since I'm coloring both the line AND marker with my above "solution" what happens when I try to use a mask wave is that the line after the marker I want to be color also gets colored for a longer (more noticeable) period.

The setting the marker number to NaN worked fine.