Re: Creating a Scatter Plot with Labeled Points

• To: mathgroup at smc.vnet.net
• Subject: [mg127174] Re: Creating a Scatter Plot with Labeled Points
• From: "djmpark" <djmpark at comcast.net>
• Date: Thu, 5 Jul 2012 06:12:15 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <5694614.26862.1341391328927.JavaMail.root@m06>

```In this case at least, throw ListPlot into the ashcan.  Instead use Graphics
and just Map the desired point display onto the coordinate list.

S11Exercise64b = {{0, 120}, {10, 119}, {20, 118}, {30, 117}, {40,
116}, {50, 115}, {60, 114}, {70, 113}, {80, 112}};

If the plot is going to be viewed in Mathematica then I think the best
solution might be to put a Tooltip on each point.

Graphics[
{AbsolutePointSize[4],
Tooltip[Point[#], #] & /@ S11Exercise64b},
AspectRatio -> 1/2,
PlotRange -> {{-5, 85}, {100, 130}},
Axes -> True, AxesLabel -> {x, y}, AxesOrigin -> {-5, 100}]

If you want to "print" the coordinates next to the point you could use:

Graphics[
{AbsolutePointSize[4],
{Point[#], Text[#, #, {0, -2}]} & /@ S11Exercise64b},
AspectRatio -> 1/2,
PlotRange -> {{-5, 85}, {100, 130}},
Axes -> True, AxesLabel -> {x, y}, AxesOrigin -> {-5, 100},
ImageSize -> 600]

But there I had to increase the ImageSize to keep the labels from cluttering
each other. As an alternative we could print the coordinates vertically.

Graphics[
{AbsolutePointSize[4],
{Point[#], Text[#, #, {-1.2, 0}, {0, 1}]} & /@ S11Exercise64b},
AspectRatio -> 1/2,
PlotRange -> {{-5, 85}, {100, 130}},
Axes -> True, AxesLabel -> {x, y}, AxesOrigin -> {-5, 100},
ImageSize -> 400]

As well as Tooltips there are probably other less intrusive methods to
present the coordinates. One would be to draw faint lines to the coordinate
axes.

Graphics[
{{GrayLevel[0.9],
Line[{# {0, 1} - {5, 0}, #, # {1, 0} + {0, 111}}]} & /@
S11Exercise64b,
AbsolutePointSize[4],
Point[#] & /@ S11Exercise64b},
AspectRatio -> 1,
PlotRange -> {{-5, 85}, {111, 121}},
Frame -> True, FrameLabel -> {x, y},
FrameTicks -> Automatic,
ImageSize -> 400]

If the points are not so evenly spaced one could use data based ticks where
the tick labels and positions are at the point coordinate positions.

Another possibility is to present the data in both a plot and in a formatted
table.

David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/index.html

From: Mike McCraith [mailto:sandwaterhand at gmail.com]

Hello there.  I'm trying to graph a Scatter Plot based on a given list of
data and have the coordinates appear near the point.

I'm trying to save time and, instead of manually typing the text for the
coordinates, I'd like to be able to pull the coordinates from the list to
plot them point and list the text.  Here's what I have so far:

S11Exercise64b = {{0, 120}, {10, 119}, {20, 118}, {30, 117}, {40, 116}, {50,
115}, {60, 114}, {70, 113}, {80, 112}}; ListPlot[S11Exercise64b, AxesLabel
-> {x, y}, AxesOrigin -> {0, 0},  Epilog -> {Blue, PointSize[.02],
Point[S11Exercise64b],
Text[Style[
"(" && S11Exercise64b[[1, 1]] && "," && S11Exercise64b[[1, 2]] && ")",
FontSize -> 18], {.9*S11Exercise64b[[1, 1]] + 30, .9*S11Exercise64b[[1, 2]]
+ .2}],
}
]

Please note, for this example, I am the first point (0, 120).

The line that begins with the "(" && S11Exercise64b...is my attempt to
extract the coordinates from the given list.  Thus, next to the point, it
should read (0,120).  However, I am getting ( ^ 0^, ^ 120 ^).  Basically, my
lack of knowledge concerning strings is one of my issues.

But, as you can see, once fixed, I'd have to create a Text[Style[ line for
every ordered pair that I have in the list.  Is there a way to automate this
process?  Again, a lack of know-how leads to now knowing how to do For
loops.

Any help is always greatly appreciated.