[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: plot range in Object Graphics

David Fanning wrote:

> I really think this is a simple problem of not scaling
> either the data or the axes properly.
> ...
> You have to go get the *actual* values of your axes and
> scale the data to those, or you will get exactly the problems
> you describe.

While I agree that scaling the axes and plot correctly is a pain, and that not scaling
properly can produce this result, in this case it looks to me like it is a problem with
version 5.0.  The code below, when used in IDL5.0 exhibits the problem, whereas in
IDL5.3 it looks fine.

 thisPlot = Obj_New("IDLgrPLOT", findgen(10), sin(findgen(10)),xrange=[0,8.5],
 thisPlot->GetProperty, XRange=xrange, YRange=yrange

 xAxis1 = Obj_New("IDLgrAxis", 0, Color=[255,255,255],Range=xrange, Location=[10, 0
,0], $
    /Exact, name='xaxis1')
 yAxis1 = Obj_New("IDLgrAxis", 1, Color=[255,255,255],Range=yrange, Location=[0,10,0],
    /Exact, name='yaxis1')
 yAxis2 = Obj_New("IDLgrAxis", 1, Color=[255,255,255],Range=yrange, Location=[1,10,0],
    /Exact, ame='yaxis2')

 xAxis1->GetProperty, CRange=xrange
 yAxis1->GetProperty, CRange=yrange

 xs = Normalize(xrange)
 ys = Normalize(yrange)

 thisPlot->SetProperty, XCoord_Conv=xs, YCoord_Conv=ys
 xAxis1->SetProperty, XCoord_Conv=xs
 yAxis1->SetProperty, YCoord_Conv=ys
 yAxis2->SetProperty, YCoord_Conv=ys

 thisModel = Obj_New('IDLgrModel')
 thisModel->Add, xAxis1
 thisModel->Add, yAxis1
 thisModel->Add, yAxis2
 thisModel->Add, thisPlot

 thisView = Obj_New('IDLgrView', Viewplane_Rect=[-.2, -.2, 1.3, 1.3], Location=[0,0],
 thisView->Add, thisModel
 thisWindow->Draw, thisView

 xAxis1->GetProperty, CRange=xrange
 yAxis1->GetProperty, CRange=yrange
 anotherPlot = Obj_New("IDLgrPLOT", findgen(20)-5.2, sin(findgen(20)),xrange=xrange, $
    yrange=yrange, Color=[255,0,0], XCoord_Conv=xs, YCoord_Conv=ys)
 thisModel->Add, anotherPlot
 thisWindow->Draw, thisView

> P.S. Please don't implement the Polygon idea.

Don't worry. That's why I spend so much time reading this newsgroup.

> It's just to grim to imagine and is in the worst tradition of just getting
> the damn thing to work. :-(

Unfortunately, as a physicist who needs to do my own -quick- visualizations while
learning IDL at the same time, I have sometimes had to write code that would make a
true software engineer shriek in horror in order to meet a deadline. This is, I think,
sometimes a necessary evil. A sin, on the other hand, would be never bothering to learn
the proper technique, or worse yet, writing improper code that will fall into the hands
of other people.

Have you ever used duct-tape to patch a radiator hose so that you can get to work?