Is there any way to specify the size of an arrowhead in printer's points? I'm looking for something that would have similar functionality to AbsolutePointSize
, AbsoluteThickness
, or AbsoluteDashing
, except for Arrowheads.
The best I have come up with is to use something like Arrowheads[1.5/???]
, where ???
is the width of the Graphics
object. However, this doesn't work if I don't know the width of the graphic. I've played around with using Offset
or Scaled
, but I haven't been able to get them to work for this purpose.
Edit: Thanks for the suggestions so far. A few comments:
So far I have been using
ImageSize
combined with theArrowheads[1.5/???]
, but this is annoying for two reasons. First, it makes it impossible to set the height of the graphic usingImageSize -> {{10000},{hmax}}
. Second, it means that I have to pass the ImageSize as a parameter through a series of functions that I have written.The sizes
Tiny
,Small
,Medium
, andLarge
are exactly what I'm looking for, except that they don't seem to work with custom arrowhead graphics. In particular, the specificationArrowheads[{{Medium, 1/2, Graphics[Line[{{-1, 1}, {1, 0}, {-1, -1}}]]}}]
within a
Graphics
command followed by anArrow
produces the following mysterious error:Encountered "Graphics[Line[{{-1, 1}, {1, 0}, {-1, -1}}]]" where a Graphics was expected in the value of option Arrowheads.
Edit 2: Problem solved! As Brett suggests below, it works to use offset coordinates:
MyArrows = Arrowheads[{{0.000001, 0.5,
Graphics[Line[{Offset[{-4.5, 5.4}], Offset[{4.5, 0}], Offset[{-4.5, -5.4}]}]]
}}]
When using this approach, it seems to work better on curved lines to specify a very small arrowhead size such as 0.000001. Here is some sample output using the arrowhead style above:
Answer
You could create a custom arrowhead using Offset
coordinates, which are in terms of printer's points:
arrow = Graphics[
Polygon[{{0, 0}, Offset[{-10, 5}, {0, 0}], Offset[{-5, 0}, {0, 0}],
Offset[{-10, -5}, {0, 0}]}]];
Table[Graphics[{Arrowheads[{{0.1, 1, arrow}}],
Arrow[{{0, 0}, {1, 1}}]}, ImageSize -> s], {s, Range[25, 150, 25]}]
Comments
Post a Comment