The square keyword chooses any extreme limit to force the x and y scales to have identical units – so that a circle will always look round, not elliptical, for instance. Of course, if you set all four limits explicitly, the square keyword will have no effect. For example,

limits, square=1, 0., "e", 0., "e" |

forces the lower limits of both x and y to zero, while the upper limits are chosen to both show all of the data in the first quadrant, and to keep the units of x and y the same (normally, this means xmax and ymax are equal, but if the viewport were not square, xmax and ymax would be in the same ratio as the sides of the viewport). The square keyword remains in effect even if the units are changed, hence, for example,

limits |

will reset all limits to extreme values, but now one axis may extend beyond the limits of the data in that direction to keep the x and y units equal. To return to the default behavior, you must explicitly call the limits command with the square keyword again, for example,

limits, square=0 |