canvas Y-coordinate of labels
Â
Hello,
What is a good approach to find the canvas Y-coordinates of labels? For example, in the attached file I want to know the canvas Y-coordinate of "Debt Fraction" so I can align "60%" accordingly.Â
You would be finding the y-coordinate from inside an OnGraphDraw or OnGraphClick attribute, of course. For your example graph image,Â
Local (x,y) := GraphToCanvasCoord(info, roles, 'Debt Fraction', -240K);
would give you the point along the Y-axis right at the center of the bar. I read off the -240K from your horizontal axis. You could put anything in there (e.g., 0) and then useÂ
info[OnGraphDrawItem='PlotAreaLeft']
for the horizontal pixel coord. Also, it appears that your index Input_assumptions has text labels since they aren't blue in your image. If it has handles, then you would write
Local (x,y) := GraphToCanvasCoord(info,roles, Handle(Debt_Fraction), -240K);
The order of the two graph-values -- i.e., 'Debt Fraction' and -240K -- is vertical axis first, horizontal axis second in this case. That is because this graph has "swap XY" on. The vertical axis is the logical X axis (independent variable), the horizontal is the logical Y axis (dependent variable) when swap XY is on.Â
In your image, you have shifted the label down a bit from the center for your desired position. If you to useÂ
Local (x,y) := GraphToCanvasCoord(info,roles, 'Debt Fraction', -240K); CanvasDrawText(canv,"test",x,y)
the top of the text would be aligned with the center of the bar. A second piece here is to figure out how much space you have to shift that label down if you don't want it centered. I expected this to work:
Local (x,y) := GraphToCanvasCoord(info,roles, 'A', -220K); Local bw := info[OnGraphDrawItem='BarWidthPix']; CanvasDrawText(canv,"test",x,y+bw/2,vAlign:'Bottom')
but discovered that (at least in release 6.2) that BarWidthPix is only correct when SwapXY is off. I expect that to be fixed in 6.3. A workaround is this:
Local (x,y) := GraphToCanvasCoord(info,roles, 'Debt Fraction', -240K); Local bw := If info[OnGraphDrawItem='SwapXY'] Then info[OnGraphDrawItem='PlotAreaHeight'] / size(#roles[GraphingRole='X axis',GraphFillerInfo='Labels']) Else info[OnGraphDrawItem='BarWidthPix']; CanvasDrawText(canv,"test",x,y+bw/2,vAlign:'Bottom')
 This ends up putting the label at the position in your example screenshot.
- 4 Forums
- 87 Topics
- 286 Posts
- 2 Online
- 1,874 Members