Okay, i think i know the error now. You want the value 81 to be on the top of the graphic (almost y = 0??). if so, the problem is the height calculation. add 2 variables int dlHeight = int dsHeight = just replace this piece of code spacer_height = (height/maxCount); // amount of space between numbers (x axis) int tempHeight = parentHeight; // temp storage int modCheck = Isqrt(maxCount); // gets square root of the maxcount for(int i = 0; i < maxCount; i++) { if((i%modCheck)==0) // Space Saver { g.DrawLine(Gray, 50, tempHeight-25, width+25, tempHeight-25); // draws guide line g.DrawString(i.ToString(),new Font("Verdana", 7), Brushes.Black, 5, tempHeight-32); // draws int value } tempHeight = (tempHeight-spacer_height); // calculate next location for guide line and int value } with this one int tempHeight = parentHeight; // temp storage // These variables are new int sqrtMaxCount = Isqrt(maxCount); int rowHeight = height / sqrtMaxCount; for(int i = 0; i < sqrtMaxCount; i++) { // Try to check the calculation... its simpler than before and therefore should be understandable... g.DrawLine(Gray, 50, tempHeight-rowHeight, width+25, tempHeight-rowHeight); g.DrawString(i.ToString(),new Font("Verdana", 7), Brushes.Black, 5, tempHeight-rowHeight-7); // -7 because it was the difference between the relative Line and String Y value. tempHeight -= rowHeight; // This has changed a little bit. } in case you haven't found it out yourself yet :) I hope i didnt miss anything - currently i'm too lazy to write it myself but if it doesn't work i'll give it a try :) *edit* i forgot to change the condition for the for-loop... that would have turned out bad!