Skip to content
canvas Y-coordinate...
 
Notifications
Clear all

canvas Y-coordinate of labels

2 Posts
2 Users
0 Reactions
1,393 Views
Hadi Eshraghi
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
1 Reply
Avatar
Posts: 26
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.

Reply
Share:

Download the free edition of Analytica

The free version of Analytica lets you create and edit models with up to 101 variables, which is pretty substantial since each variable can be a multidimensional array. It also lets you run larger modes in ‘browse mode.’ Learn more about the free edition.

While Analytica doesn’t run on macOS, it does work with Parallels or VMWare through Windows.


    Analytica Cubes Pattern

    Download the free edition of Analytica

    The free version of Analytica lets you create and edit models with up to 101 variables, which is pretty substantial since each variable can be a multidimensional array. It also lets you run larger modes in ‘browse mode.’ Learn more about the free edition.

    While Analytica doesn’t run on macOS, it does work with Parallels or VMWare through Windows.


      Analytica Cubes Pattern