Dimensões dos gráficos (função `PlotRange` imprecisa)

Oct 13 2020

Existe uma função que lhe dá dimensões de Graphics? Quero dizer xe ydimensões da região retangular em que o conteúdo Graphicsse encaixaria.

Graphics[{Table[
   Circle[RandomReal[{-10, 10}, 2], RandomReal[{0, 10}, 2], 
    RandomReal[{0, 2 π}, 2]], {n, 100}]}]

Atualizar:

PlotRange é inútil, pois está longe de ser preciso.

v = Table[
   Circle[RandomReal[{-10, 10}, 2], RandomReal[{0, 10}, 2], 
    RandomReal[{0, 2 π}, 2]], {n, 100}];
Graphics[{v}];
Graphics[{v, {Transparent, EdgeForm[Red], 
   Rectangle @@ Transpose[PlotRange[%]]}}]

Também BoundingRegionnão adianta pelo mesmo motivo - ser impreciso.

Respostas

6 CarlWoll Oct 13 2020 at 22:47

Você pode usar o "GraphicsInformation" para esta finalidade:ResourceFunction

SeedRandom[1];
g = Graphics[{
    Table[
        Circle[RandomReal[{-10,10},2],RandomReal[{0,10},2],RandomReal[{0,2 π},2]],
        {n, 100}
    ]

Usando a função de recurso "GraphicsInformation":

pr = Lookup[ResourceFunction["GraphicsInformation"][g], "PlotRange"]

{{-17,8295, 17,0196}, {-19,7501, 19,9222}}

Verificar:

Show[
    g, 
    Epilog -> {
        EdgeForm[Red],
        FaceForm[None],
        Rectangle[{pr[[1,1]], pr[[2,1]]}, {pr[[1,2]], pr[[2,2]]}]
    }
]

"GraphicsInformation" também retorna outras informações úteis:

Keys @ ResourceFunction["GraphicsInformation"][g]

{"ImagePadding", "ImageSize", "PlotRangeSize", "ImagePaddingSize",
"PlotRange", "BasePlotRange"}