Line size with f(z)
KZarzana
Is there a way to set the line size of a trace using f(z)? For only two sizes the best I've been able to come up with is to add the trace to the graph twice, set the traces to two different line sizes, and then use a color index wave to make portions of one trace transparent. This is pretty awkward and only allows for two sizes.
Make/O/D/N=10000 Y_Values=sin(p/100)
Make/O/U/B/N=10000 Line_Size=Y_Values>=0
Make/O/D/N=(4,2) Color_Table={{0,0},{0,0},{0,0},{65535,0}}
Display Y_Values,Y_Values
ModifyGraph lsize(Y_Values)=3,rgb(Y_Values#1)=(0,0,0),zColor(Y_Values)={Line_Size,*,*,cindexRGB,0,Color_Table}
Make/O/U/B/N=10000 Line_Size=Y_Values>=0
Make/O/D/N=(4,2) Color_Table={{0,0},{0,0},{0,0},{65535,0}}
Display Y_Values,Y_Values
ModifyGraph lsize(Y_Values)=3,rgb(Y_Values#1)=(0,0,0),zColor(Y_Values)={Line_Size,*,*,cindexRGB,0,Color_Table}
I didn't find a setting for the line size, but if the spacing of your data is small, then you can approximate this effect with f(z) to marker size and round markers.
Display testdata
ModifyGraph mode=3,marker=19,zmrkSize(testdata)={linesize,*,*,1,10}
February 16, 2022 at 11:06 pm - Permalink
I've done that in the past, but for this particular dataset markers didn't look as nice as lines. Fortunately I only needed two sizes, so my hack with two traces worked.
February 18, 2022 at 12:00 pm - Permalink
There is another option, somewhat kludgy, but perhaps useful for a final pre-publication version. Simply convert the graphed wave segments into sequential draw-line objects and vary the line thickness in each segment. This will require you to set up x,y wave pairs for your wave vertices. The following example may be quick guide.
wave wx, wy
variable np=dimsize(wx,0)
variable i
setdrawlayer/K userback
setdrawlayer userback
for(i=0;i<(np-1);i+=1)
setdrawenv xcoord=bottom, ycoord=left, linethick=0.5*(i+1), linejoin=1
drawline wx[i],wy[i],wx[i+1],wy[i+1]
endfor
end
The first setdrawlayer/K clears the previous draw result and initializes the graph.
You might also want to explore better options (miter-join?) to clean up the ends, depending on the line thicknesses used. Igor has lots of wave drawing options, but none seem to offer variable line thicknesses. The example shows the x,y markers as well.
February 22, 2022 at 05:27 am - Permalink
I might add that line thickness as f(z) may be somewhat problematic- I presume that what everyone would expect would be long, thin trapezoids with the correct thickness at each end. While theoretically feasible, it is quite a departure from what we have now (that is, would require quite a bit of pretty complicated new code) and the drawing performance would be very poor. The alternative would be to do it the way we do color as f(z): the color is set by the value at the starting end of the line and that color continues to the next data point. At the next data point a new color is set. So applying that to line thickness would result in a thickness set at one end and continuing to the next data point, where it would abruptly change thickness. Sounds kind of ugly to me :)
But it does seem like an obvious extension of our present color, marker size, and marker number as f(z). I'll file an enhancement request and we'll see...
February 22, 2022 at 09:26 am - Permalink
I just had another sudden thought: prepare your f(z) wave as an error bar wave and use the option for shaded error region. You can make the trace itself zero thickness (I think) or at least use the same color for the trace and the error shading. You will need to play with scaling of the f(z) wave to get the desired effect.
February 22, 2022 at 09:29 am - Permalink
In reply to I just had another sodden… by johnweeks
isn't an error region +/- y? that isn't the same as line thickness, steep line segments will be thinner?
February 22, 2022 at 10:30 am - Permalink
Yes, good point. But for suitable data it might approximate what's needed.
February 22, 2022 at 11:28 am - Permalink
Well, you can control the line width in Gizmo (see, for example, radius wave in Path object).
February 22, 2022 at 12:47 pm - Permalink