This is a somewhat subtle issue if the function is a pure python function (you'd need to analyze the argument names), but maybe a convention is that if variable names are specified, they must match up to argument names in the function, and then they are slotted into the function using a dictionary, so that no matter where in the variable range list the range for x appears, it always is sent to the function as f(x=value).
See http://sagenb.org/home/jason3/302/
I think that each of these should return the same plot:
sage: var('x,y')
sage: def f(x,y):
... return x*sin(y)
...
sage: plot3d(f, (x,0,3),(y,-6,6),viewer='tachyon')
sage: plot3d(f, (y,-6,6),(x,0,3),viewer='tachyon')
sage: g(x,y)= x*sin(y)
sage: plot3d(g, (x,0,3),(y,-6,6),viewer='tachyon')
sage: plot3d(g, (y,-6,6),(x,0,3),viewer='tachyon')
CC: @sagetrac-wcauchois @robertwb @orlitzky
Component: graphics
Author: Robert Bradshaw, Tim Dumol, Jason Grout
Reviewer: Ross Kyprianou
Issue created by migration from https://trac.sagemath.org/ticket/7512