Coordinate problems with Inset (and a bug)
- To: mathgroup at smc.vnet.net
- Subject: [mg80578] Coordinate problems with Inset (and a bug)
- From: thomas <thomas.muench at gmail.com>
- Date: Sun, 26 Aug 2007 03:12:04 -0400 (EDT)
Hello, group, **Part 1 of post ** Here is a problem I used to have with Mathematica 5.2 and the Rectangle[coord,graphics] function to draw insets in a graphics. This syntax is not working anymore in Mathematica 6, it has been replaced by Inset, which has much more powerful placement capabilities. Nevertheless, I still cannot do what I want. So, here we go: I plot data, using ListLinePlot, ususally with Frame- >True, Background->Gray, which represents the timecourse of experimental biological data. At certain timepoints something happens in the experiment, e.g. I show a light for 1 second. I would like to indicate this event in the plot by plotting a white rectangle under the data trace during the appropriate time (as a Prolog). The problem is: The x-coordinates of the rectangle are absolute coordinates (the time when the light goes on and off), while the y- coordinates should span the whole plot, or the bottom 1/5th of the plot, and are therefor relative, or scaled, coordinates. I cannot figure out how to combine absolute coordinates in one dimension with Scaled[] coordinates in the other dimension. I know that I can get around this problem by using one of two tricks: either pre-computing the range of my data, and using absolute y- coordinates (min and max of the data). Alternatively I can use standard absolute y-coordinates that go way beyond the range of my data, then only the part within the plotregion is shown, and it LOOKS the way I want (it just seems like less than elegant solution). **Part 2 of post** Now to an apparent bug in Inset: data=Range[20]/2; rect=Graphics[Rectangle[]]; (* This works fine: *) ListLinePlot[data, Frame -> True, Prolog -> Inset[rect, {2, 5}, {0, 0}, {2, 2}]] Notice that a rectangle of size 2x2 is drawn, with its left bottom edge ({0,0}) placed at position {2,5} in the plot. According to the help file of Inset: "y coordinates can be numbers, Automatic or Top, Center, Bottom, Baseline or Axis." The y-coordinate "5" is roughly in center of the plot, so I thought the following should work and produce roughly the same result (but it doesn't): (* Here, no rectangle is drawn: *) ListLinePlot[data, Frame -> True, Prolog -> Inset[rect, {2, Center}, {0, 0}, {2, 2}]] The reason is that now, for some reason, Inset interprets the x- coordinate as a relative (scaled) coordinate, so the rectangle vanishes off to the right. In order to see the rectangle, the x- coordinate has to be a fraction now. So, this brings back the rectangle: ListLinePlot[data, Frame -> True, Prolog -> Inset[rect, {.15, Center}, {0, 0}, {2, 2}]] Is this a bug or a feature????? thomas