Re: Plotting Points with Labels
- To: mathgroup at smc.vnet.net
- Subject: [mg83522] Re: Plotting Points with Labels
- From: sdw <nospam.warwick at jps.net>
- Date: Thu, 22 Nov 2007 04:44:16 -0500 (EST)
- References: <fhrs0c$5i4$1@smc.vnet.net> <fhu84a$7hq$1@smc.vnet.net>
slight improvement - need to make sure text is left justified relative
to insertion point .. add the {-1,0} to the text specification
labeledpoint =
Function[{x, y, dose}, {Point[{x, y}],
Style[Text[
StringJoin["dose = ", ToString[Round[dose]],
" cGy"], {x + shiftText, y}, {-1, 0}], Bold, 12, Black]}];
Albert wrote:
> JOHN ERB wrote:
>> The code below plots "pntdata" labeling the points, where the data
>> represents the x and y coordinates, and the value at that point
>> {{x1,y1,value1}, ... , {xN,yN,valueN}};
>>
>> The labels are shifted to the right (+x direction) of the respective points
>> by the value of "shiftText."
>>
>> Is there a better (or more succinct) way of doing this?
>
> While succinct is usualy not what matters, code quality has many aspects
> and needs to be defined more precisely. The following changes are merely
> a matter of taste...
>
> That said, in this case I would get rid of the intermediate expression
> newdata which doesn't really make things simpler. Here I also would
> prefer the @@@ operator which is an Apply with level 1, since it saves
> you all these brackets. Then I wouldn't nest the pure function so deeply
> but rather define it seperatly. In real code I would also prefer named
> arguments in the pure function for readability and finally for the same
> reason I am fond of using line breaks to reflect the nesting of
> expressions that are longer than a line (the frontend does a good job on
> automatic indentation, I think). The code I would write could look like
> this:
>
> pntdata = {{0, 0, 100.01}, {2, 2, 350.4}, {4, 5, 380.5}};
> shiftText = 0.8;
>
> labeledpoint = Function[{x, y, dose},{
> Point[{x, y}],
> Style[
> Text[
> StringJoin["dose = ", ToString[Round[dose]], " cGy"],
> {x + shiftText, y}
> ],
> Bold, 12, Black
> ]
> }]
>
> Graphics[
> {Red, PointSize[0.02], labeledpoint @@@ pntdata},
> Frame -> True
> ]
>
> hope you'll like my taste, the code isn't more succinct than it was
> before, though :-)
>
> albert
>