Plotting of Hyperplane Arrangements¶
PLOT OPTIONS:
Beside the usual plot options (enter plot?
), the plot command for
hyperplane arrangements includes the following:
hyperplane_colors
– color or list of colors, one for each hyperplane (default: equally spread range of hues)hyperplane_labels
– boolean,'short'
,'long'
(default:False
). IfFalse
, no labels are shown; if ‘short’ or ‘long’, the hyperplanes are given short or long labels, respectively. IfTrue
, the hyperplanes are given long labels.label_colors
– color or list of colors, one for each hyperplane (default: black)label_fontsize
– size for hyperplane_label font (default:14
); this does not work for 3d plotslabel_offsets
– amount be which labels are offset from h.point() for each hyperplane h. The format is different for each dimension: if the hyperplanes have dimension 0, the offset can be a single number or a list of numbers, one for each hyperplane; if the hyperplanes have dimension 1, the offset can be a single 2-tuple, or a list of 2-tuples, one for each hyperplane; if the hyperplanes have dimension 2, the offset can be a single 3-tuple or a list of 3-tuples, one for each hyperplane. (Defaults: 0-dim:0.1
, 1-dim:(0,1)
, 2-dim:(0,0,0.2)
).hyperplane_legend
– boolean,'short'
,'long'
(default:'long'
; in 3-d:False
). IfFalse
, no legend is shown; ifTrue
,'short'
, or'long'
, the legend is shown with the default, long, or short labeling, respectively. (For arrangements of lines or planes, only.)hyperplane_opacities
– a number or list of numbers, one for each hyperplane, between 0 and 1; only applies to 3d plotspoint_sizes
– number or list of numbers, one for each hyperplane giving the sizes of points in a zero-dimensional arrangement (default:50
)ranges
– range for the parameters or a list of ranges of parameters, one for each hyperplane, for the parametric plots of the hyperplanes. If a single positive number \(r\) is given forranges
, then all parameters run from -r to r. Otherwise, for a line in the plane, the range has the form[a,b]
(default:[-3,3]
), and for a plane in 3-space, the range has the form[[a,b],[c,d]]
(default:[[-3,3],[-3,3]]
). The ranges are centered aroundhyperplane_arrangement.point()
.
EXAMPLES:
sage: H3.<x,y,z> = HyperplaneArrangements(QQ)
sage: A = H3([(1,0,0), 0], [(0,0,1), 5])
sage: A.plot(hyperplane_opacities=0.5, hyperplane_labels=True, # needs sage.plot
....: hyperplane_legend=False)
Graphics3d Object
sage: c = H3([(1,0,0),0], [(0,0,1),5])
sage: c.plot(ranges=10) # needs sage.plot
Graphics3d Object
sage: c.plot(ranges=[[9.5,10], [-3,3]]) # needs sage.plot
Graphics3d Object
sage: c.plot(ranges=[[[9.5,10], [-3,3]], [[-6,6], [-5,5]]]) # needs sage.plot
Graphics3d Object
sage: H2.<s,t> = HyperplaneArrangements(QQ)
sage: h = H2([(1,1),0], [(1,-1),0], [(0,1),2])
sage: h.plot(ranges=20) # needs sage.plot
Graphics object consisting of 3 graphics primitives
sage: h.plot(ranges=[-1, 10]) # needs sage.plot
Graphics object consisting of 3 graphics primitives
sage: h.plot(ranges=[[-1, 1], [-5, 5], [-1, 10]]) # needs sage.plot
Graphics object consisting of 3 graphics primitives
sage: a = hyperplane_arrangements.coordinate(3)
sage: opts = {'hyperplane_colors':['yellow', 'green', 'blue']}
sage: opts['hyperplane_labels'] = True
sage: opts['label_offsets'] = [(0,2,2), (2,0,2), (2,2,0)]
sage: opts['hyperplane_legend'] = False
sage: opts['hyperplane_opacities'] = 0.7
sage: a.plot(**opts) # needs sage.plot
Graphics3d Object
sage: opts['hyperplane_labels'] = 'short'
sage: a.plot(**opts) # needs sage.plot
Graphics3d Object
sage: H.<u> = HyperplaneArrangements(QQ)
sage: pts = H(3*u+4, 2*u+5, 7*u+1)
sage: pts.plot(hyperplane_colors=['yellow','black','blue']) # needs sage.plot
Graphics object consisting of 3 graphics primitives
sage: pts.plot(point_sizes=[50,100,200], hyperplane_colors='blue') # needs sage.plot
Graphics object consisting of 3 graphics primitives
sage: H.<x,y,z> = HyperplaneArrangements(QQ)
sage: a = H(x, y+1, y+2)
sage: a.plot(hyperplane_labels=True, label_colors='blue', label_fontsize=18) # needs sage.plot
Graphics3d Object
sage: a.plot(hyperplane_labels=True, label_colors=['red','green','black']) # needs sage.plot
Graphics3d Object
>>> from sage.all import *
>>> H3 = HyperplaneArrangements(QQ, names=('x', 'y', 'z',)); (x, y, z,) = H3._first_ngens(3)
>>> A = H3([(Integer(1),Integer(0),Integer(0)), Integer(0)], [(Integer(0),Integer(0),Integer(1)), Integer(5)])
>>> A.plot(hyperplane_opacities=RealNumber('0.5'), hyperplane_labels=True, # needs sage.plot
... hyperplane_legend=False)
Graphics3d Object
>>> c = H3([(Integer(1),Integer(0),Integer(0)),Integer(0)], [(Integer(0),Integer(0),Integer(1)),Integer(5)])
>>> c.plot(ranges=Integer(10)) # needs sage.plot
Graphics3d Object
>>> c.plot(ranges=[[RealNumber('9.5'),Integer(10)], [-Integer(3),Integer(3)]]) # needs sage.plot
Graphics3d Object
>>> c.plot(ranges=[[[RealNumber('9.5'),Integer(10)], [-Integer(3),Integer(3)]], [[-Integer(6),Integer(6)], [-Integer(5),Integer(5)]]]) # needs sage.plot
Graphics3d Object
>>> H2 = HyperplaneArrangements(QQ, names=('s', 't',)); (s, t,) = H2._first_ngens(2)
>>> h = H2([(Integer(1),Integer(1)),Integer(0)], [(Integer(1),-Integer(1)),Integer(0)], [(Integer(0),Integer(1)),Integer(2)])
>>> h.plot(ranges=Integer(20)) # needs sage.plot
Graphics object consisting of 3 graphics primitives
>>> h.plot(ranges=[-Integer(1), Integer(10)]) # needs sage.plot
Graphics object consisting of 3 graphics primitives
>>> h.plot(ranges=[[-Integer(1), Integer(1)], [-Integer(5), Integer(5)], [-Integer(1), Integer(10)]]) # needs sage.plot
Graphics object consisting of 3 graphics primitives
>>> a = hyperplane_arrangements.coordinate(Integer(3))
>>> opts = {'hyperplane_colors':['yellow', 'green', 'blue']}
>>> opts['hyperplane_labels'] = True
>>> opts['label_offsets'] = [(Integer(0),Integer(2),Integer(2)), (Integer(2),Integer(0),Integer(2)), (Integer(2),Integer(2),Integer(0))]
>>> opts['hyperplane_legend'] = False
>>> opts['hyperplane_opacities'] = RealNumber('0.7')
>>> a.plot(**opts) # needs sage.plot
Graphics3d Object
>>> opts['hyperplane_labels'] = 'short'
>>> a.plot(**opts) # needs sage.plot
Graphics3d Object
>>> H = HyperplaneArrangements(QQ, names=('u',)); (u,) = H._first_ngens(1)
>>> pts = H(Integer(3)*u+Integer(4), Integer(2)*u+Integer(5), Integer(7)*u+Integer(1))
>>> pts.plot(hyperplane_colors=['yellow','black','blue']) # needs sage.plot
Graphics object consisting of 3 graphics primitives
>>> pts.plot(point_sizes=[Integer(50),Integer(100),Integer(200)], hyperplane_colors='blue') # needs sage.plot
Graphics object consisting of 3 graphics primitives
>>> H = HyperplaneArrangements(QQ, names=('x', 'y', 'z',)); (x, y, z,) = H._first_ngens(3)
>>> a = H(x, y+Integer(1), y+Integer(2))
>>> a.plot(hyperplane_labels=True, label_colors='blue', label_fontsize=Integer(18)) # needs sage.plot
Graphics3d Object
>>> a.plot(hyperplane_labels=True, label_colors=['red','green','black']) # needs sage.plot
Graphics3d Object
H3.<x,y,z> = HyperplaneArrangements(QQ) A = H3([(1,0,0), 0], [(0,0,1), 5]) A.plot(hyperplane_opacities=0.5, hyperplane_labels=True, # needs sage.plot hyperplane_legend=False) c = H3([(1,0,0),0], [(0,0,1),5]) c.plot(ranges=10) # needs sage.plot c.plot(ranges=[[9.5,10], [-3,3]]) # needs sage.plot c.plot(ranges=[[[9.5,10], [-3,3]], [[-6,6], [-5,5]]]) # needs sage.plot H2.<s,t> = HyperplaneArrangements(QQ) h = H2([(1,1),0], [(1,-1),0], [(0,1),2]) h.plot(ranges=20) # needs sage.plot h.plot(ranges=[-1, 10]) # needs sage.plot h.plot(ranges=[[-1, 1], [-5, 5], [-1, 10]]) # needs sage.plot a = hyperplane_arrangements.coordinate(3) opts = {'hyperplane_colors':['yellow', 'green', 'blue']} opts['hyperplane_labels'] = True opts['label_offsets'] = [(0,2,2), (2,0,2), (2,2,0)] opts['hyperplane_legend'] = False opts['hyperplane_opacities'] = 0.7 a.plot(**opts) # needs sage.plot opts['hyperplane_labels'] = 'short' a.plot(**opts) # needs sage.plot H.<u> = HyperplaneArrangements(QQ) pts = H(3*u+4, 2*u+5, 7*u+1) pts.plot(hyperplane_colors=['yellow','black','blue']) # needs sage.plot pts.plot(point_sizes=[50,100,200], hyperplane_colors='blue') # needs sage.plot H.<x,y,z> = HyperplaneArrangements(QQ) a = H(x, y+1, y+2) a.plot(hyperplane_labels=True, label_colors='blue', label_fontsize=18) # needs sage.plot a.plot(hyperplane_labels=True, label_colors=['red','green','black']) # needs sage.plot
- sage.geometry.hyperplane_arrangement.plot.legend_3d(hyperplane_arrangement, hyperplane_colors, length)[source]¶
Create plot of a 3d legend for an arrangement of planes in 3-space.
The
length
parameter determines whether short or long labels are used in the legend.INPUT:
hyperplane_arrangement
– a hyperplane arrangementhyperplane_colors
– list of colorslength
– either'short'
or'long'
OUTPUT: a graphics object
EXAMPLES:
sage: a = hyperplane_arrangements.semiorder(3) sage: from sage.geometry.hyperplane_arrangement.plot import legend_3d sage: legend_3d(a, list(colors.values())[:6], length='long') # needs sage.combinat sage.plot Graphics object consisting of 6 graphics primitives sage: b = hyperplane_arrangements.semiorder(4) sage: c = b.essentialization() sage: legend_3d(c, list(colors.values())[:12], length='long') # needs sage.combinat sage.plot Graphics object consisting of 12 graphics primitives sage: legend_3d(c, list(colors.values())[:12], length='short') # needs sage.combinat sage.plot Graphics object consisting of 12 graphics primitives sage: p = legend_3d(c, list(colors.values())[:12], length='short') # needs sage.combinat sage.plot sage: p.set_legend_options(ncol=4) # needs sage.combinat sage.plot sage: type(p) # needs sage.combinat sage.plot <class 'sage.plot.graphics.Graphics'>
>>> from sage.all import * >>> a = hyperplane_arrangements.semiorder(Integer(3)) >>> from sage.geometry.hyperplane_arrangement.plot import legend_3d >>> legend_3d(a, list(colors.values())[:Integer(6)], length='long') # needs sage.combinat sage.plot Graphics object consisting of 6 graphics primitives >>> b = hyperplane_arrangements.semiorder(Integer(4)) >>> c = b.essentialization() >>> legend_3d(c, list(colors.values())[:Integer(12)], length='long') # needs sage.combinat sage.plot Graphics object consisting of 12 graphics primitives >>> legend_3d(c, list(colors.values())[:Integer(12)], length='short') # needs sage.combinat sage.plot Graphics object consisting of 12 graphics primitives >>> p = legend_3d(c, list(colors.values())[:Integer(12)], length='short') # needs sage.combinat sage.plot >>> p.set_legend_options(ncol=Integer(4)) # needs sage.combinat sage.plot >>> type(p) # needs sage.combinat sage.plot <class 'sage.plot.graphics.Graphics'>
a = hyperplane_arrangements.semiorder(3) from sage.geometry.hyperplane_arrangement.plot import legend_3d legend_3d(a, list(colors.values())[:6], length='long') # needs sage.combinat sage.plot b = hyperplane_arrangements.semiorder(4) c = b.essentialization() legend_3d(c, list(colors.values())[:12], length='long') # needs sage.combinat sage.plot legend_3d(c, list(colors.values())[:12], length='short') # needs sage.combinat sage.plot p = legend_3d(c, list(colors.values())[:12], length='short') # needs sage.combinat sage.plot p.set_legend_options(ncol=4) # needs sage.combinat sage.plot type(p) # needs sage.combinat sage.plot
- sage.geometry.hyperplane_arrangement.plot.plot(hyperplane_arrangement, **kwds)[source]¶
Return a plot of the hyperplane arrangement.
If the arrangement is in 4 dimensions but inessential, a plot of the essentialization is returned.
Note
This function is available as the
plot()
method of hyperplane arrangements. You should not call this function directly, only through the method.INPUT:
hyperplane_arrangement
– the hyperplane arrangement to plot**kwds
– plot options: seesage.geometry.hyperplane_arrangement.plot
OUTPUT: a graphics object of the plot
EXAMPLES:
sage: B = hyperplane_arrangements.semiorder(4) sage: B.plot() # needs sage.combinat sage.plot Displaying the essentialization. Graphics3d Object
>>> from sage.all import * >>> B = hyperplane_arrangements.semiorder(Integer(4)) >>> B.plot() # needs sage.combinat sage.plot Displaying the essentialization. Graphics3d Object
B = hyperplane_arrangements.semiorder(4) B.plot() # needs sage.combinat sage.plot
- sage.geometry.hyperplane_arrangement.plot.plot_hyperplane(hyperplane, **kwds)[source]¶
Return the plot of a single hyperplane.
INPUT:
**kwds
– plot options: see below
OUTPUT: a graphics object of the plot
Plot Options
Beside the usual plot options (enter
plot?
), the plot command for hyperplanes includes the following:hyperplane_label
– boolean value or string (default:True
); ifTrue
, the hyperplane is labeled with its equation, if a string, it is labeled by that string, otherwise it is not labeledlabel_color
– (default:'black'
) color for hyperplane_labellabel_fontsize
– size forhyperplane_label
font (default: 14) (does not work in 3d, yet)label_offset
– (default: 0-dim: 0.1, 1-dim: (0,1), 2-dim: (0,0,0.2)); amount by which label is offset fromhyperplane.point()
point_size
– (default: 50) size of points in a zero-dimensional arrangement or of an arrangement over a finite fieldranges
– range for the parameters for the parametric plot of the hyperplane. If a single positive numberr
is given for the value ofranges
, then the ranges for all parameters are set to \([-r, r]\). Otherwise, for a line in the plane,ranges
has the form[a, b]
(default: [-3,3]), and for a plane in 3-space, theranges
has the form[[a, b], [c, d]]
(default: [[-3,3],[-3,3]]). (The ranges are centered aroundhyperplane.point()
.)
EXAMPLES:
sage: H1.<x> = HyperplaneArrangements(QQ) sage: a = 3*x + 4 sage: a.plot() # indirect doctest # needs sage.plot Graphics object consisting of 3 graphics primitives sage: a.plot(point_size=100, hyperplane_label='hello') # needs sage.plot Graphics object consisting of 3 graphics primitives sage: H2.<x,y> = HyperplaneArrangements(QQ) sage: b = 3*x + 4*y + 5 sage: b.plot() # needs sage.plot Graphics object consisting of 2 graphics primitives sage: b.plot(ranges=(1,5), label_offset=(2,-1)) # needs sage.plot Graphics object consisting of 2 graphics primitives sage: opts = {'hyperplane_label': True, 'label_color': 'green', ....: 'label_fontsize': 24, 'label_offset': (0,1.5)} sage: b.plot(**opts) # needs sage.plot Graphics object consisting of 2 graphics primitives sage: # needs sage.plot sage: H3.<x,y,z> = HyperplaneArrangements(QQ) sage: c = 2*x + 3*y + 4*z + 5 sage: c.plot() Graphics3d Object sage: c.plot(label_offset=(1,0,1), color='green', label_color='red', ....: frame=False) Graphics3d Object sage: d = -3*x + 2*y + 2*z + 3 sage: d.plot(opacity=0.8) Graphics3d Object sage: e = 4*x + 2*z + 3 sage: e.plot(ranges=[[-1,1],[0,8]], label_offset=(2,2,1), aspect_ratio=1) Graphics3d Object
>>> from sage.all import * >>> H1 = HyperplaneArrangements(QQ, names=('x',)); (x,) = H1._first_ngens(1) >>> a = Integer(3)*x + Integer(4) >>> a.plot() # indirect doctest # needs sage.plot Graphics object consisting of 3 graphics primitives >>> a.plot(point_size=Integer(100), hyperplane_label='hello') # needs sage.plot Graphics object consisting of 3 graphics primitives >>> H2 = HyperplaneArrangements(QQ, names=('x', 'y',)); (x, y,) = H2._first_ngens(2) >>> b = Integer(3)*x + Integer(4)*y + Integer(5) >>> b.plot() # needs sage.plot Graphics object consisting of 2 graphics primitives >>> b.plot(ranges=(Integer(1),Integer(5)), label_offset=(Integer(2),-Integer(1))) # needs sage.plot Graphics object consisting of 2 graphics primitives >>> opts = {'hyperplane_label': True, 'label_color': 'green', ... 'label_fontsize': Integer(24), 'label_offset': (Integer(0),RealNumber('1.5'))} >>> b.plot(**opts) # needs sage.plot Graphics object consisting of 2 graphics primitives >>> # needs sage.plot >>> H3 = HyperplaneArrangements(QQ, names=('x', 'y', 'z',)); (x, y, z,) = H3._first_ngens(3) >>> c = Integer(2)*x + Integer(3)*y + Integer(4)*z + Integer(5) >>> c.plot() Graphics3d Object >>> c.plot(label_offset=(Integer(1),Integer(0),Integer(1)), color='green', label_color='red', ... frame=False) Graphics3d Object >>> d = -Integer(3)*x + Integer(2)*y + Integer(2)*z + Integer(3) >>> d.plot(opacity=RealNumber('0.8')) Graphics3d Object >>> e = Integer(4)*x + Integer(2)*z + Integer(3) >>> e.plot(ranges=[[-Integer(1),Integer(1)],[Integer(0),Integer(8)]], label_offset=(Integer(2),Integer(2),Integer(1)), aspect_ratio=Integer(1)) Graphics3d Object
H1.<x> = HyperplaneArrangements(QQ) a = 3*x + 4 a.plot() # indirect doctest # needs sage.plot a.plot(point_size=100, hyperplane_label='hello') # needs sage.plot H2.<x,y> = HyperplaneArrangements(QQ) b = 3*x + 4*y + 5 b.plot() # needs sage.plot b.plot(ranges=(1,5), label_offset=(2,-1)) # needs sage.plot opts = {'hyperplane_label': True, 'label_color': 'green', 'label_fontsize': 24, 'label_offset': (0,1.5)} b.plot(**opts) # needs sage.plot # needs sage.plot H3.<x,y,z> = HyperplaneArrangements(QQ) c = 2*x + 3*y + 4*z + 5 c.plot() c.plot(label_offset=(1,0,1), color='green', label_color='red', frame=False) d = -3*x + 2*y + 2*z + 3 d.plot(opacity=0.8) e = 4*x + 2*z + 3 e.plot(ranges=[[-1,1],[0,8]], label_offset=(2,2,1), aspect_ratio=1)