Re: Plotting Points with Labels
- To: mathgroup at smc.vnet.net
- Subject: [mg83434] Re: Plotting Points with Labels
- From: Albert <awnl at arcor.net>
- Date: Tue, 20 Nov 2007 03:54:39 -0500 (EST)
- References: <fhrs0c$5i4$1@smc.vnet.net>
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