Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In HTML5 Canvas, can I make the y axis go up rather than down?

I'm drawing a graph in Canvas and struggling with the fact that the y-axis is "backward." The origin is in the top-left corner, and increasing values go down rather than up.

(0,0)            (x,0)       (0,y) ^       +-------------->             |       |                            |       |    CANVAS                  |     INSTEAD       |    DOES THIS               |     OF THIS       |                            |       |                            +-----------------> (0,y) v                       (0,0)              (x,0)  

I know that I can move the origin to the bottom-left corner using translate().

context.translate(0, canvas.height); 

And I know that I can invert the y-axis using scale().

context.scale(1, -1); 

That seems to work, except that it causes text to appear upside-down. Is there a way to make Canvas's coordinates work the way I expect?

like image 954
Patrick McElhaney Avatar asked Dec 02 '10 13:12

Patrick McElhaney


1 Answers

For more modern setup, you can use context.transform(1, 0, 0, -1, 0, canvas.height). This flips y axis and moves the whole canvas one screenful.

More on available transformations: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform

like image 170
user5520124 Avatar answered Sep 18 '22 21:09

user5520124