开发者

Labeling vertices of a polygon in Mathematica

Given a set of points in the plane T={a1,a2,...,an} then Graphics[Polygon[T]] will plot the polygon generated by the points. How can I add labels to the polyg开发者_高级运维on's vertices? Have merely the index as a label would be better then nothing. Any ideas?


pts = {{1, 0}, {0, Sqrt[3]}, {-1, 0}};
Graphics[
 {{LightGray, Polygon[pts]},
  {pts /. {x_, y_} :> Text[Style[{x, y}, Red], {x, y}]}}
 ]

Labeling vertices of a polygon in Mathematica

To add point also

pts = {{1, 0}, {0, Sqrt[3]}, {-1, 0}};
Graphics[
 {{LightGray, Polygon[pts]},
  {pts /. {x_, y_} :> Text[Style[{x, y}, Red], {x, y}, {0, -1}]},
  {pts /. {x_, y_} :> {Blue, PointSize[0.02], Point[{x, y}]}}
  }
 ]

Labeling vertices of a polygon in Mathematica

update:

Use the index:

pts = {{1, 0}, {0, Sqrt[3]}, {-1, 0}};
Graphics[
 {{LightGray, Polygon[pts]},
  {pts /. {x_, y_} :> 
     Text[Style[Position[pts, {x, y}], Red], {x, y}, {0, -1}]}
  }
 ]

Labeling vertices of a polygon in Mathematica


Nasser's version (update) uses pattern matching. This one uses functional programming. MapIndexed gives you both the coordinates and their index without the need for Position to find it.

pts = {{1, 0}, {0, Sqrt[3]}, {-1, 0}};
Graphics[
 {
  {LightGray, Polygon[pts]},
  MapIndexed[Text[Style[#2[[1]], Red], #1, {0, -1}] &, pts]
  }
 ]

Labeling vertices of a polygon in Mathematica

or, if you don't like MapIndexed, here's a version with Apply (at level 1, infix notation @@@).

pts = {{1, 0}, {0, Sqrt[3]}, {-1, 0}};
idx = Range[Length[pts]];
Graphics[
 {
  {LightGray, Polygon[pts]},
  Text[Style[#2, Red], #1, {0, -1}] & @@@ ({pts, idx}\[Transpose])
  }
 ]

This can be expanded to arbitrary labels as follows:

pts = {{1, 0}, {0, Sqrt[3]}, {-1, 0}};
idx = {"One", "Two", "Three"};
Graphics[
 {
  {LightGray, Polygon[pts]},
  Text[Style[#2, Red], #1, {0, -1}] & @@@ ({pts, idx}\[Transpose])
  }
 ]

Labeling vertices of a polygon in Mathematica


You can leverage the options of GraphPlot for this. Example:

c = RandomReal[1, {3, 2}]
g = GraphPlot[c, VertexLabeling -> True, VertexCoordinateRules -> c];

Graphics[{Polygon@c, g[[1]]}]

This way you can also make use of VertexLabeling -> Tooltip, or VertexRenderingFunction if you want to. If you do not want the edges overlaid, you may add EdgeRenderingFunction -> None to the GraphPlot function. Example:

c = RandomReal[1, {3, 2}]
g = GraphPlot[c, VertexLabeling -> All, VertexCoordinateRules -> c, 
   EdgeRenderingFunction -> None, 
   VertexRenderingFunction -> ({White, EdgeForm[Black], Disk[#, .02], 
       Black, Text[#2, #1]} &)];

Graphics[{Brown, Polygon@c, g[[1]]}]

Labeling vertices of a polygon in Mathematica

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜