canvas Y-coordinate...

Clear all

# canvas Y-coordinate of labels

2 Posts
2 Users
0 Likes
921 Views
Posts: 6
Customer
Topic starter
(@ftnsbonl38owc63xjps05ixlkbt2)
Active Member
Joined: 3 years ago

Â

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.Â

Topic Tags
Posts: 25
Moderator
(@drice)
Member
Joined: 3 years ago

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.

Share: