Circles - 2D Graphics

Skip to content
Back to top
View this page
Edit this page

# Circles

class sage.plot.circle.Circle(x, y, r, options)

  Bases: `GraphicPrimitive`

  Primitive class for the `Circle` graphics type. See `circle?` for information about actually plotting circles.

  INPUT:

  - `x` – \(x\)-coordinate of center of Circle

  - `y` – \(y\)-coordinate of center of Circle

  - `r` – radius of Circle object

  - `options` – dictionary of valid plot options to pass to constructor

  EXAMPLES:

  Note this should normally be used indirectly via `circle`:

  Sage

      sage: from sage.plot.circle import Circle
      sage: C = Circle(2,3,5,{'zorder':2})
      sage: C
      Circle defined by (2.0,3.0) with r=5.0
      sage: C.options()['zorder']
      2
      sage: C.r
      5.0

  Python

      >>> from sage.all import *
      >>> from sage.plot.circle import Circle
      >>> C = Circle(Integer(2),Integer(3),Integer(5),{'zorder':Integer(2)})
      >>> C
      Circle defined by (2.0,3.0) with r=5.0
      >>> C.options()['zorder']
      2
      >>> C.r
      5.0

  get_minmax_data()

    Return a dictionary with the bounding box data.

    EXAMPLES:

    Sage

        sage: p = circle((3, 3), 1)
        sage: d = p.get_minmax_data()
        sage: d['xmin']
        2.0
        sage: d['ymin']
        2.0

    Python

        >>> from sage.all import *
        >>> p = circle((Integer(3), Integer(3)), Integer(1))
        >>> d = p.get_minmax_data()
        >>> d['xmin']
        2.0
        >>> d['ymin']
        2.0

  plot3d(z=0, **kwds)

    Plots a 2D circle (actually a 50-gon) in 3D, with default height zero.

    INPUT:

    - `z` – (optional) 3D height above \(xy\)-plane

    EXAMPLES:

    Sage

        sage: circle((0,0), 1).plot3d()
        Graphics3d Object

    Python

        >>> from sage.all import *
        >>> circle((Integer(0),Integer(0)), Integer(1)).plot3d()
        Graphics3d Object

    This example uses this method implicitly, but does not pass the optional parameter z to this method:

    Sage

        sage: sum(circle((random(),random()), random()).plot3d(z=random())
        ....:     for _ in range(20))
        Graphics3d Object

    [Python]

        >>> from sage.all import *
        >>> sum(circle((random(),random()), random()).plot3d(z=random())
        ...     for _ in range(Integer(20)))
        Graphics3d Object

    These examples are explicit, and pass z to this method:

    Sage

        sage: from math import pi
        sage: C = circle((2,pi), 2, hue=.8, alpha=.3, fill=True)
        sage: c = C[0]
        sage: d = c.plot3d(z=2)
        sage: d.texture.opacity
        0.3

    Python

        >>> from sage.all import *
        >>> from math import pi
        >>> C = circle((Integer(2),pi), Integer(2), hue=RealNumber('.8'), alpha=RealNumber('.3'), fill=True)
        >>> c = C[Integer(0)]
        >>> d = c.plot3d(z=Integer(2))
        >>> d.texture.opacity
        0.3

    Sage

        sage: C = circle((2,pi), 2, hue=.8, alpha=.3, linestyle='dotted')
        sage: c = C[0]
        sage: d = c.plot3d(z=2)
        sage: d.jmol_repr(d.testing_render_params())[0][-1]
        'color $line_1 translucent 0.7 [204,0,255]'

    [Python]

        >>> from sage.all import *
        >>> C = circle((Integer(2),pi), Integer(2), hue=RealNumber('.8'), alpha=RealNumber('.3'), linestyle='dotted')
        >>> c = C[Integer(0)]
        >>> d = c.plot3d(z=Integer(2))
        >>> d.jmol_repr(d.testing_render_params())[Integer(0)][-Integer(1)]
        'color $line_1 translucent 0.7 [204,0,255]'

sage.plot.circle.circle(center, radius, alpha=1, fill=False, thickness=1, edgecolor='blue', facecolor='blue', linestyle='solid', zorder=5, legend_label=None, legend_color=None, clip=True, aspect_ratio=1.0, **options)

  Return a circle at a point center = \((x,y)\) (or \((x,y,z)\) and parallel to the \(xy\)-plane) with radius = \(r\). Type `circle.options` to see all options.

  OPTIONS:

  - `alpha` – (default: 1)

  - `fill` – (default: `False`)

  - `thickness` – (default: 1)

  - `linestyle` – (default: `'solid'`) (2D plotting only) the style of the line, which is one of `'dashed'`, `'dotted'`, `'solid'`, `'dashdot'`, or `'--'`, `':'`, `'-'`, `'-.'`, respectively

  - `edgecolor` – (default: `'blue'`) 2D plotting only

  - `facecolor` – (default: `'blue'`) 2D plotting only, useful only if `fill=True`

  - `rgbcolor` – 2D or 3D plotting. This option overrides `edgecolor` and `facecolor` for 2D plotting

  - `legend_label` – the label for this item in the legend

  - `legend_color` – the color for the legend label

  EXAMPLES:

  The default color is blue, the default linestyle is solid, but this is easy to change:

  Sage

      sage: c = circle((1,1), 1)
      sage: c
      Graphics object consisting of 1 graphics primitive

  Python

      >>> from sage.all import *
      >>> c = circle((Integer(1),Integer(1)), Integer(1))
      >>> c
      Graphics object consisting of 1 graphics primitive

  Sage

      sage: c = circle((1,1), 1, rgbcolor=(1,0,0), linestyle='-.')
      sage: c
      Graphics object consisting of 1 graphics primitive

  [Python]

      >>> from sage.all import *
      >>> c = circle((Integer(1),Integer(1)), Integer(1), rgbcolor=(Integer(1),Integer(0),Integer(0)), linestyle='-.')
      >>> c
      Graphics object consisting of 1 graphics primitive

  We can also use this command to plot three-dimensional circles parallel to the \(xy\)-plane:

  Sage

      sage: c = circle((1,1,3), 1, rgbcolor=(1,0,0))
      sage: c
      Graphics3d Object
      sage: type(c)
      <class 'sage.plot.plot3d.base.TransformGroup'>

  Python

      >>> from sage.all import *
      >>> c = circle((Integer(1),Integer(1),Integer(3)), Integer(1), rgbcolor=(Integer(1),Integer(0),Integer(0)))
      >>> c
      Graphics3d Object
      >>> type(c)
      <class 'sage.plot.plot3d.base.TransformGroup'>

  To correct the aspect ratio of certain graphics, it is necessary to show with a `figsize` of square dimensions:

  Sage

      sage: c.show(figsize=[5,5],xmin=-1,xmax=3,ymin=-1,ymax=3)

  [Python]

      >>> from sage.all import *
      >>> c.show(figsize=[Integer(5),Integer(5)],xmin=-Integer(1),xmax=Integer(3),ymin=-Integer(1),ymax=Integer(3))

  Here we make a more complicated plot, with many circles of different colors:

  Sage

      sage: g = Graphics()
      sage: step = 6; ocur = 1/5; paths = 16
      sage: PI = math.pi    # numerical for speed -- fine for graphics
      sage: for r in range(1,paths+1):
      ....:     for x,y in [((r+ocur)*math.cos(n), (r+ocur)*math.sin(n))
      ....:                 for n in srange(0, 2*PI+PI/step, PI/step)]:
      ....:         g += circle((x,y), ocur, rgbcolor=hue(r/paths))
      ....:     rnext = (r+1)^2
      ....:     ocur = (rnext-r)-ocur
      sage: g.show(xmin=-(paths+1)^2, xmax=(paths+1)^2,
      ....:        ymin=-(paths+1)^2, ymax=(paths+1)^2, figsize=[6,6])

  Python

      >>> from sage.all import *
      >>> g = Graphics()
      >>> step = Integer(6); ocur = Integer(1)/Integer(5); paths = Integer(16)
      >>> PI = math.pi    # numerical for speed -- fine for graphics
      >>> for r in range(Integer(1),paths+Integer(1)):
      ...     for x,y in [((r+ocur)*math.cos(n), (r+ocur)*math.sin(n))
      ...                 for n in srange(Integer(0), Integer(2)*PI+PI/step, PI/step)]:
      ...         g += circle((x,y), ocur, rgbcolor=hue(r/paths))
      ...     rnext = (r+Integer(1))**Integer(2)
      ...     ocur = (rnext-r)-ocur
      >>> g.show(xmin=-(paths+Integer(1))**Integer(2), xmax=(paths+Integer(1))**Integer(2),
      ...        ymin=-(paths+Integer(1))**Integer(2), ymax=(paths+Integer(1))**Integer(2), figsize=[Integer(6),Integer(6)])

  Note that the `rgbcolor` option overrides the other coloring options. This produces red fill in a blue circle:

  Sage

      sage: circle((2,3), 1, fill=True, edgecolor='blue', facecolor='red')
      Graphics object consisting of 1 graphics primitive

  [Python]

      >>> from sage.all import *
      >>> circle((Integer(2),Integer(3)), Integer(1), fill=True, edgecolor='blue', facecolor='red')
      Graphics object consisting of 1 graphics primitive

  This produces an all-green filled circle:

  Sage

      sage: circle((2,3), 1, fill=True, edgecolor='blue', rgbcolor='green')
      Graphics object consisting of 1 graphics primitive

  Python

      >>> from sage.all import *
      >>> circle((Integer(2),Integer(3)), Integer(1), fill=True, edgecolor='blue', rgbcolor='green')
      Graphics object consisting of 1 graphics primitive

  The option `hue` overrides all other options, so be careful with its use. This produces a purplish filled circle:

  Sage

      sage: circle((2,3), 1, fill=True, edgecolor='blue', rgbcolor='green', hue=.8)
      Graphics object consisting of 1 graphics primitive

  [Python]

      >>> from sage.all import *
      >>> circle((Integer(2),Integer(3)), Integer(1), fill=True, edgecolor='blue', rgbcolor='green', hue=RealNumber('.8'))
      Graphics object consisting of 1 graphics primitive

  And circles with legends:

  Sage

      sage: circle((4,5), 1, rgbcolor='yellow', fill=True,
      ....:        legend_label='the sun').show(xmin=0, ymin=0)

  Python

      >>> from sage.all import *
      >>> circle((Integer(4),Integer(5)), Integer(1), rgbcolor='yellow', fill=True,
      ...        legend_label='the sun').show(xmin=Integer(0), ymin=Integer(0))

  Sage

      sage: circle((4,5), 1,
      ....:        legend_label='the sun', legend_color='yellow').show(xmin=0, ymin=0)

  [Python]

      >>> from sage.all import *
      >>> circle((Integer(4),Integer(5)), Integer(1),
      ...        legend_label='the sun', legend_color='yellow').show(xmin=Integer(0), ymin=Integer(0))

  Extra options will get passed on to show(), as long as they are valid:

  Sage

      sage: circle((0, 0), 2, figsize=[10,10])  # That circle is huge!
      Graphics object consisting of 1 graphics primitive

  Python

      >>> from sage.all import *
      >>> circle((Integer(0), Integer(0)), Integer(2), figsize=[Integer(10),Integer(10)])  # That circle is huge!
      Graphics object consisting of 1 graphics primitive

  Sage

      sage: circle((0, 0), 2).show(figsize=[10,10])  # These are equivalent

  [Python]

      >>> from sage.all import *
      >>> circle((Integer(0), Integer(0)), Integer(2)).show(figsize=[Integer(10),Integer(10)])  # These are equivalent