music21.graph.axis¶
Definitions for extracting data from a Stream to place on one axis of a
PlotStream or similar object.
Axis¶
- class music21.graph.axis.Axis(client=None, axisName='x')¶
An Axis is an easier way of specifying what to plot on any given axis.
Client should be a .plot.PlotStream or None. Eventually a Stream may be allowed, but not yet.
Axis bases
Axis read-only properties
- Axis.stream¶
Returns a reference to the client’s .streamObj (or None if client is None)
If the client is itself a stream, return it.
Read-only
Read-only properties inherited from ProtoM21Object:
Axis read/write properties
- Axis.client¶
The client stores a reference to the Plot that makes reference to this axis.
(Like all music21 clients, It is normally stored internally as a weakref, so no need for garbage collecting)
- Axis.label¶
Returns self.label or class.labelDefault if not set:
>>> ax = graph.axis.Axis(axisName='y') >>> ax.label 'an axis' >>> ax.label = 'velocity' >>> ax.label 'velocity'
Axis methods
- Axis.extractOneElement(n: note.GeneralNote, formatDict: dict[str, t.Any]) t.Any¶
Override in subclasses
- Axis.postProcessData(dataList=None)¶
Routine to be called after data has been extracted to do any cleanup, etc. Defaults to doing nothing, but see CountingAxis for an example of how this works.
- Axis.setBoundariesFromData(values)¶
If self.minValue is not set, then set self.minValue to be the minimum of these values.
Same with maxValue
>>> ax = graph.axis.Axis() >>> print(ax.minValue) None
>>> values = [10, 0, 3, 5] >>> ax.setBoundariesFromData(values) >>> ax.minValue 0 >>> ax.maxValue 10
If a boundary is given or .setXXXFromData is False then no changes are made
>>> ax = graph.axis.Axis() >>> ax.minValue = -1 >>> ax.setBoundariesFromData(values) >>> ax.minValue -1 >>> ax.maxValue 10
- Axis.ticks()¶
Get a set of ticks for this data. Used by several numeric axes to make a reasonable number of ticks.
>>> cax = graph.axis.Axis() >>> cax.minValue = 1 >>> cax.maxValue = 9 >>> cax.ticks() [(0, '0'), (1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'), (6, '6'), (7, '7'), (8, '8'), (9, '9'), (10, '10')]
For larger data, the ticks are farther apart.
>>> cax.minValue = 7 >>> cax.maxValue = 80 >>> cax.ticks() [(0, '0'), (10, '10'), (20, '20'), (30, '30'), (40, '40'), (50, '50'), (60, '60'), (70, '70'), (80, '80'), (90, '90')]
>>> cax.minValue = 712 >>> cax.maxValue = 2213 >>> cax.ticks() [(600, '600'), (700, '700'), (800, '800'), (900, '900'), (1000, '1000'), ... (2100, '2100'), (2200, '2200'), (2300, '2300')]
Methods inherited from ProtoM21Object:
Axis instance variables
- Axis.axisDataMap¶
a dict of {‘x’: 0, ‘y’: 1, ‘z’: 2} mapping where an axis’s data can be found in self.client.data after extract data is run:
>>> b = corpus.parse('bwv66.6') >>> plot = graph.plot.ScatterPitchClassOffset(b) >>> pcAxis = plot.axisY >>> pcAxis.axisName 'y' >>> pcAxisDataIndex = pcAxis.axisDataMap[pcAxis.axisName] >>> pcAxisDataIndex 1 >>> plot.extractData() >>> pcValues = [dataTuple[pcAxisDataIndex] for dataTuple in plot.data] >>> pcValues[0:2] [1, 11]
- Axis.axisName¶
the name of the axis. One of “x” or “y” or for 3D Plots, “z”
- Axis.maxValue¶
None or number representing the axis maximum. Default None.
- Axis.minValue¶
None or number representing the axis minimum. Default None.
- Axis.quantities¶
a tuple of strings representing the quantities the axis can plot. The first element of the tuple is the authoritative name.
>>> ax = graph.axis.DynamicsAxis() >>> ax.quantities ('dynamic', 'dynamics', 'volume')
CountingAxis¶
- class music21.graph.axis.CountingAxis(client=None, axisName='y')¶
Axis subclass for counting data in another Axis.
Used for histograms, weighted scatter, etc.
>>> bach = corpus.parse('bwv66.6') >>> plotS = graph.plot.PlotStream(bach) >>> plotS.axisX = graph.axis.PitchSpaceAxis(plotS, 'x') >>> plotS.axisY = graph.axis.CountingAxis(plotS) >>> plotS.doneAction = None >>> plotS.run() >>> plotS.data [(42.0, 1, {}), (45.0, 1, {}), (46.0, 1, {}), (47.0, 5, {}), (49.0, 6, {}), ...]
CountingAxis bases
CountingAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
CountingAxis read/write properties
Read/write properties inherited from Axis:
CountingAxis methods
- CountingAxis.postProcessData()¶
Replace client.data with a list that only includes each key once.
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
CountingAxis instance variables
- CountingAxis.countAxes¶
a string or tuple of strings representing an axis or axes to use in counting
Instance variables inherited from Axis:
DynamicsAxis¶
- class music21.graph.axis.DynamicsAxis(client=None, axisName='x')¶
Axis subclass for dealing with Dynamics
DynamicsAxis bases
DynamicsAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
DynamicsAxis read/write properties
Read/write properties inherited from Axis:
DynamicsAxis methods
- DynamicsAxis.setBoundariesFromData(values=None)¶
If self.minValue is not set, then set self.minValue to be the minimum of these values.
Same with maxValue
>>> ax = graph.axis.Axis() >>> print(ax.minValue) None
>>> values = [10, 0, 3, 5] >>> ax.setBoundariesFromData(values) >>> ax.minValue 0 >>> ax.maxValue 10
If a boundary is given or .setXXXFromData is False then no changes are made
>>> ax = graph.axis.Axis() >>> ax.minValue = -1 >>> ax.setBoundariesFromData(values) >>> ax.minValue -1 >>> ax.maxValue 10
- DynamicsAxis.ticks()¶
Utility method to get ticks in dynamic values:
>>> ax = graph.axis.DynamicsAxis() >>> ax.ticks() [(0, '$pppppp$'), (1, '$ppppp$'), (2, '$pppp$'), (3, '$ppp$'), (4, '$pp$'), (5, '$p$'), (6, '$mp$'), (7, '$mf$'), (8, '$f$'), (9, '$fp$'), (10, '$sf$'), (11, '$ff$'), (12, '$fff$'), (13, '$ffff$'), (14, '$fffff$'), (15, '$ffffff$')]
A minimum and maximum dynamic index can be specified as minValue and maxValue
>>> ax.minValue = 3 >>> ax.maxValue = 6 >>> ax.ticks() [(3, '$ppp$'), (4, '$pp$'), (5, '$p$'), (6, '$mp$')]
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
DynamicsAxis instance variables
Instance variables inherited from Axis:
OffsetAxis¶
- class music21.graph.axis.OffsetAxis(client=None, axisName='x')¶
Axis subclass for dealing with Offsets
OffsetAxis bases
OffsetAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
OffsetAxis read/write properties
- OffsetAxis.label¶
Return an axis label for measure or offset, depending on if measures are available.
>>> a = graph.axis.OffsetAxis() >>> a.label 'Offset' >>> a.useMeasures = True >>> a.label 'Measure Number'
Read/write properties inherited from Axis:
OffsetAxis methods
- OffsetAxis.extractOneElement(n, formatDict)¶
Override in subclasses
- OffsetAxis.getOffsetMap()¶
Find the first partlike object and get the measureOffsetMap from it, or an empty-dict if not.
>>> b = corpus.parse('bwv66.6') >>> p = graph.plot.PlotStream(b) >>> ax = graph.axis.OffsetAxis(p, 'x') >>> om = ax.getOffsetMap() >>> om OrderedDict([(0.0, [<music21.stream.Measure 0 offset=0.0>]), (1.0, [<music21.stream.Measure 1 offset=1.0>]), (5.0, [<music21.stream.Measure 2 offset=5.0>]), ...])
Same if called on a single part:
>>> p = graph.plot.PlotStream(b.parts[0]) >>> ax = graph.axis.OffsetAxis(p, 'x') >>> om2 = ax.getOffsetMap() >>> om2 OrderedDict([(0.0, [<music21.stream.Measure 0 offset=0.0>]), (1.0, [<music21.stream.Measure 1 offset=1.0>]), (5.0, [<music21.stream.Measure 2 offset=5.0>]), ...])
But empty if called on a single Measure …
>>> p = graph.plot.PlotStream(b.parts[0].getElementsByClass(stream.Measure)[2]) >>> ax = graph.axis.OffsetAxis(p, 'x') >>> om3 = ax.getOffsetMap() >>> om3 {}
- OffsetAxis.setBoundariesFromData(values=None)¶
If self.minValue is not set, then set self.minValue to be the minimum of these values.
Same with maxValue
>>> ax = graph.axis.Axis() >>> print(ax.minValue) None
>>> values = [10, 0, 3, 5] >>> ax.setBoundariesFromData(values) >>> ax.minValue 0 >>> ax.maxValue 10
If a boundary is given or .setXXXFromData is False then no changes are made
>>> ax = graph.axis.Axis() >>> ax.minValue = -1 >>> ax.setBoundariesFromData(values) >>> ax.minValue -1 >>> ax.maxValue 10
- OffsetAxis.setUseMeasuresFromOffsetMap(offsetMap=None)¶
Given an offsetMap and .useMeasures=None return True or False based on whether the offsetMap or self.getOffsetMap() is non-empty.
>>> b = corpus.parse('bwv66.6') >>> p = graph.plot.PlotStream(b) >>> ax = graph.axis.OffsetAxis(p, 'x') >>> print(ax.useMeasures) None >>> ax.setUseMeasuresFromOffsetMap() True
Sets .useMeasures as a side effect:
>>> ax.useMeasures True
same as:
>>> ax = graph.axis.OffsetAxis(p, 'x') >>> om = ax.getOffsetMap() >>> ax.setUseMeasuresFromOffsetMap(om) True
If .useMeasures is set explicitly, then we return that
>>> ax.useMeasures = False >>> ax.setUseMeasuresFromOffsetMap() False
Returns False if the offsetMap is empty
>>> p = graph.plot.PlotStream(b.parts[0].getElementsByClass(stream.Measure)[2]) >>> axMeasure = graph.axis.OffsetAxis(p, 'x') >>> axMeasure.setUseMeasuresFromOffsetMap() False >>> axMeasure.useMeasures False
- OffsetAxis.ticks()¶
Get offset or measure ticks
>>> bach = corpus.parse('bach/bwv281.xml') >>> plotS = graph.plot.PlotStream(bach) >>> ax = graph.axis.OffsetAxis(plotS) >>> ax.setBoundariesFromData() >>> ax.ticks() # on whole score, showing anacrusis spacing [(0.0, '0'), (1.0, '1'), (5.0, '2'), (9.0, '3'), (13.0, '4'), (17.0, '5'), (21.0, '6'), (25.0, '7'), (29.0, '8')]
We can reduce the number of ticks shown:
>>> ax.mostMeasureTicksToShow = 4 >>> ax.ticks() [(0.0, '0'), (9.0, '3'), (21.0, '6'), (29.0, '8')]
We can also plot on a part:
>>> soprano = bach.parts.first() >>> plotSoprano = graph.plot.PlotStream(soprano) >>> ax = graph.axis.OffsetAxis(plotSoprano) >>> ax.setBoundariesFromData() >>> ax.ticks() # on whole score, showing anacrusis spacing [(0.0, '0'), (1.0, '1'), (5.0, '2'), (9.0, '3'), (13.0, '4'), (17.0, '5'), (21.0, '6'), (25.0, '7'), (29.0, '8')]
Now we will show just the first and last measure:
>>> ax.minMaxMeasureOnly = True >>> ax.ticks() [(0.0, '0'), (29.0, '8')]
Only show ticks between minValue and maxValue (in offsets):
>>> ax.minMaxMeasureOnly = False >>> ax.minValue = 8 >>> ax.maxValue = 12 >>> ax.ticks() [(9.0, '3')]
Double bars and other heavy bars always show up. (Let’s get a new axis object to see.)
>>> ax = graph.axis.OffsetAxis(plotSoprano) >>> ax.setBoundariesFromData() >>> ax.mostMeasureTicksToShow = 4 >>> ax.ticks() [(0.0, '0'), (9.0, '3'), (21.0, '6'), (29.0, '8')] >>> m5 = soprano.getElementsByClass(stream.Measure)[5] >>> m5.number 5 >>> m5.rightBarline = bar.Barline('double') >>> ax.ticks() [(0.0, '0'), (13.0, '4'), (17.0, '5'), (29.0, '8')]
Future improvements might make the spacing around the double bars a bit better. It’d be nice to see measure 2 or 3 ticked rather than measure 4.
On a raw collection of notes with no measures, offsets are used:
>>> n = note.Note('a') >>> s = stream.Stream() >>> s.repeatAppend(n, 20) >>> plotS = graph.plot.PlotStream(s) >>> ax = graph.axis.OffsetAxis(plotS) >>> ax.setBoundariesFromData() >>> ax.ticks() [(0, '0'), (10, '10'), (20, '20')]
The space between offsets is configured by .offsetStepSize. At present mostMeasureTicksToShow to does affect streams without measures.
>>> ax.offsetStepSize = 5 >>> ax.ticks() [(0, '0'), (5, '5'), (10, '10'), (15, '15'), (20, '20')]
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
OffsetAxis instance variables
- OffsetAxis.maxValue¶
The highest ending position (as an offset). Will be set automatically.
- OffsetAxis.minMaxMeasureOnly¶
If True then only the first and last values will be used to create ticks for measures. Default False.
- OffsetAxis.minValue¶
The lowest starting position (as an offset). Will be set automatically.
- OffsetAxis.mostMeasureTicksToShow¶
When plotting measures, will limit the number of ticks given to at most this number. Note that since all double/final/heavy bars are show, this number may be exceeded if there are more that this number of double bars. Default: 20.
- OffsetAxis.offsetStepSize¶
If measures are not used then this number is used to create the number of steps between an axis tick. Currently the default is 10, but it might become a function of the length of the stream eventually.
- OffsetAxis.useMeasures¶
bool or None for whether offsets (False) or measure numbers (True) should be used in the case of an offset access. Default, None, meaning to check whether the stream has measures first.
Instance variables inherited from PositionAxis:
Instance variables inherited from Axis:
OffsetEndAxis¶
- class music21.graph.axis.OffsetEndAxis(client=None, axisName='x', noteSpacing=-1)¶
An Axis that gives beginning and ending values for each element
OffsetEndAxis bases
OffsetEndAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
OffsetEndAxis read/write properties
Read/write properties inherited from OffsetAxis:
Read/write properties inherited from Axis:
OffsetEndAxis methods
- OffsetEndAxis.extractOneElement(n, formatDict)¶
Override in subclasses
Methods inherited from OffsetAxis:
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
OffsetEndAxis instance variables
- OffsetEndAxis.noteSpacing¶
amount in QL to leave blank between untied notes. (default = self.graceNoteQL)
Instance variables inherited from OffsetAxis:
Instance variables inherited from PositionAxis:
Instance variables inherited from Axis:
PitchAxis¶
- class music21.graph.axis.PitchAxis(client=None, axisName='x')¶
Axis subclass for dealing with Pitches
PitchAxis bases
PitchAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
PitchAxis read/write properties
Read/write properties inherited from Axis:
PitchAxis methods
- static PitchAxis.makePitchLabelsUnicode(ticks: list[tuple[Any, str]]) list[tuple[Any, str]]¶
Given a list of ticks, replace all labels with alternative/unicode symbols where necessary.
>>> ticks = [(60, 'C4'), (61, 'C#4'), (62, 'D4'), (63, 'E-4')] >>> t2 = graph.axis.PitchAxis.makePitchLabelsUnicode(ticks) >>> len(t2) 4 >>> [num for num, label in t2] [60, 61, 62, 63] >>> t2[0] (60, 'C4') >>> for num, label in t2: ... label 'C4' 'C♯4' 'D4' 'E♭4'
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
PitchAxis instance variables
- PitchAxis.blankLabelUnused¶
bool on whether to hide labels for unused pitches, default True.
- PitchAxis.hideUnused¶
bool on whether not to even show a tick when a pitch doesn’t exist. default True.
- PitchAxis.showEnharmonic¶
bool on whether to show both common enharmonics in labels, default True
- PitchAxis.showOctaves¶
bool or ‘few’ about whether to show octave numbers. If ‘few’ then only the first pitch in each octave is shown. Default ‘few’
Instance variables inherited from Axis:
PitchClassAxis¶
- class music21.graph.axis.PitchClassAxis(client=None, axisName='x')¶
Axis subclass for dealing with PitchClasses
By default, axis is not set from data, but set to 0, 11
PitchClassAxis bases
PitchClassAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
PitchClassAxis read/write properties
Read/write properties inherited from Axis:
PitchClassAxis methods
- PitchClassAxis.extractOneElement(n, formatDict) int | None¶
Override in subclasses
- PitchClassAxis.ticks()¶
Get ticks and labels for pitch classes.
If showEnharmonic is True (default) then when choosing whether to display as sharp or flat use the most commonly used enharmonic.
>>> s = corpus.parse('bach/bwv324.xml') >>> s.analyze('key') <music21.key.Key of G major>
>>> plotS = graph.plot.PlotStream(s) >>> ax = graph.axis.PitchClassAxis(plotS) >>> ax.hideUnused = True
Ticks returns a list of two-element tuples:
>>> ax.ticks() [(0, 'C'), (2, 'D'), ..., (11, 'B')]
>>> for position, noteName in ax.ticks(): ... print(str(position) + ' ' + noteName) 0 C 2 D 3 D♯ 4 E 6 F♯ 7 G 9 A 11 B
>>> s = corpus.parse('bach/bwv281.xml') >>> plotS = graph.plot.PlotStream(s) >>> ax = graph.axis.PitchClassAxis(plotS) >>> ax.hideUnused = True >>> ax.showEnharmonic = True
>>> for position, noteName in ax.ticks(): ... print(str(position) + ' ' + noteName) 0 C 2 D 3 E♭ 4 E 5 F 7 G 9 A 10 B♭ 11 B
>>> ax.blankLabelUnused = True >>> ax.hideUnused = False >>> for position, noteName in ax.ticks(): ... print(str(position) + ' ' + noteName) 0 C 1 2 D 3 E♭ 4 E 5 F 6 7 G 8 9 A 10 B♭ 11 B
.showEnharmonic will change here:
>>> s.append(note.Note('A#4')) >>> s.append(note.Note('G#4')) >>> s.append(note.Note('A-4')) >>> s.append(note.Note('A-4')) >>> for position, noteName in ax.ticks(): ... print(str(position) + ' ' + noteName) 0 C 1 2 D 3 E♭ 4 E 5 F 6 7 G 8 G♯/A♭ 9 A 10 A♯/B♭ 11 B
Make sure that Ab shows since there are two of them and only one G#
>>> ax.showEnharmonic = False >>> for position, noteName in ax.ticks(): ... print(str(position) + ' ' + noteName) 0 C 1 2 D 3 E♭ 4 E 5 F 6 7 G 8 A♭ 9 A 10 B♭ 11 B
Methods inherited from PitchAxis:
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
PitchClassAxis instance variables
Instance variables inherited from PitchAxis:
Instance variables inherited from Axis:
PitchSpaceAxis¶
- class music21.graph.axis.PitchSpaceAxis(client=None, axisName='x')¶
Axis subclass for dealing with PitchSpace (MIDI numbers)
PitchSpaceAxis bases
PitchSpaceAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
PitchSpaceAxis read/write properties
Read/write properties inherited from Axis:
PitchSpaceAxis methods
- PitchSpaceAxis.extractOneElement(n, formatDict)¶
Override in subclasses
- PitchSpaceAxis.ticks(dataMin=36, dataMax=100)¶
>>> ax = graph.axis.PitchSpaceAxis() >>> ax.hideUnused = False >>> ax.blankLabelUnused = False >>> ax.minValue = 20 >>> ax.maxValue = 24 >>> for ps, label in ax.ticks(): ... print(str(ps) + ' ' + label) 20 G♯0 21 A 22 B♭ 23 B 24 C1
>>> ax.showOctaves = False >>> for ps, label in ax.ticks(): ... print(str(ps) + ' ' + label) 20 G♯ 21 A 22 B♭ 23 B 24 C
>>> ax.showOctaves = True >>> for ps, label in ax.ticks(): ... print(str(ps) + ' ' + label) 20 G♯0 21 A0 22 B♭0 23 B0 24 C1
>>> ax.minValue = 60 >>> ax.maxValue = 72 >>> [x for x, y in ax.ticks()] [60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72]
>>> bach = corpus.parse('bwv66.6') >>> plotS = graph.plot.PlotStream(bach.parts[-1]) >>> ax = graph.axis.PitchSpaceAxis(plotS) >>> ax.hideUnused = False >>> ax.minValue = 36 >>> ax.maxValue = 100 >>> ticks = ax.ticks() >>> ticks[0] # blank because no note 36 in data (36, '') >>> ticks[21] (57, 'A')
Methods inherited from PitchAxis:
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
PitchSpaceAxis instance variables
Instance variables inherited from PitchAxis:
Instance variables inherited from Axis:
PitchSpaceOctaveAxis¶
- class music21.graph.axis.PitchSpaceOctaveAxis(client=None, axisName='x')¶
An axis similar to pitch classes, but just shows the octaves
PitchSpaceOctaveAxis bases
PitchSpaceOctaveAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
PitchSpaceOctaveAxis read/write properties
Read/write properties inherited from Axis:
PitchSpaceOctaveAxis methods
- PitchSpaceOctaveAxis.ticks()¶
This class does not currently take into account whether the octaves themselves are found in the Stream.
>>> ax = graph.axis.PitchSpaceOctaveAxis() >>> ax.minValue = 36 >>> ax.maxValue = 100 >>> ax.ticks() [(36, 'C2'), (48, 'C3'), (60, 'C4'), (72, 'C5'), (84, 'C6'), (96, 'C7')]
>>> ax.startNameWithOctave = 'A2' >>> ax.ticks() [(45, 'A2'), (57, 'A3'), (69, 'A4'), (81, 'A5'), (93, 'A6')]
Methods inherited from PitchSpaceAxis:
Methods inherited from PitchAxis:
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
PitchSpaceOctaveAxis instance variables
Instance variables inherited from PitchAxis:
Instance variables inherited from Axis:
PositionAxis¶
- class music21.graph.axis.PositionAxis(client=None, axisName='x')¶
Axis subclass for dealing with Positions
PositionAxis bases
PositionAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
PositionAxis read/write properties
Read/write properties inherited from Axis:
PositionAxis methods
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
PositionAxis instance variables
- PositionAxis.graceNoteQL¶
length to substitute a grace note or other Zero-length element for. Default is the length of a 64th note (1/16 of a QL)
Instance variables inherited from Axis:
QuarterLengthAxis¶
- class music21.graph.axis.QuarterLengthAxis(client=None, axisName='x')¶
Axis subclass for dealing with QuarterLengths
QuarterLengthAxis bases
QuarterLengthAxis read-only properties
Read-only properties inherited from Axis:
Read-only properties inherited from ProtoM21Object:
QuarterLengthAxis read/write properties
- QuarterLengthAxis.label¶
Read/write properties inherited from Axis:
QuarterLengthAxis methods
- QuarterLengthAxis.dataFromQL(ql)¶
- QuarterLengthAxis.extractOneElement(n, formatDict)¶
Override in subclasses
- QuarterLengthAxis.labelLogTag()¶
Returns a TeX formatted tag to the axis label depending on whether the scale is logarithmic or not. Checks .useLogScale
>>> a = graph.axis.QuarterLengthAxis() >>> a.useLogScale True >>> a.labelLogTag() ' ($log_2$)'
>>> a.useLogScale = False >>> a.labelLogTag() ''
>>> a.useLogScale = 10 >>> a.labelLogTag() ' ($log_10$)'
- QuarterLengthAxis.remapQuarterLength(x)¶
Remap a quarter length as its log2. Essentially it’s just math.log2(x), but x=0 is replaced with self.graceNoteQL.
- QuarterLengthAxis.ticks()¶
Get ticks for quarterLength.
If remap is True (the default), the remapQuarterLength() method will be used to scale displayed quarter lengths by log base 2.
Note that mix and max do nothing, but must be included in order to set the tick style.
>>> s = stream.Stream() >>> for t in ['32nd', '16th', 'eighth', 'quarter', 'half']: ... n = note.Note() ... n.duration.type = t ... s.append(n)
>>> plotS = graph.plot.PlotStream(s) >>> ax = graph.axis.QuarterLengthAxis(plotS) >>> ax.ticks() [(-3.0, '0.12'), (-2.0, '0.25'), (-1.0, '0.5'), (0.0, '1.0'), (1.0, '2.0')]
>>> ax.useLogScale = False >>> ax.ticks() [(0.125, '0.12'), (0.25, '0.25'), (0.5, '0.5'), (1.0, '1.0'), (2.0, '2.0')] >>> ax.useDurationNames = True >>> ax.ticks() [(0.125, '32nd'), (0.25, '16th'), (0.5, 'Eighth'), (1.0, 'Quarter'), (2.0, 'Half')]
>>> nGrace = note.Note() >>> nGrace.getGrace(inPlace=True) >>> s.append(nGrace) >>> plotS = graph.plot.PlotStream(s) >>> ax = graph.axis.QuarterLengthAxis(plotS) >>> ax.ticks()[0] (-4.0, '0.0')
>>> ax.useLogScale = False >>> ax.ticks()[0] (0.0625, '0.0')
Methods inherited from Axis:
Methods inherited from ProtoM21Object:
QuarterLengthAxis instance variables
- QuarterLengthAxis.useDurationNames¶
If used then duration names replace numbers for ticks. If set, probably will want to change tickFontSize in the graph object
- QuarterLengthAxis.useLogScale¶
bool or int for whether to scale numbers logarithmically. Adds (log2) to the axis label if used. If True (default) then log2 is assumed. If an int, then log the int (say, 10) is used. instead.
Instance variables inherited from PositionAxis:
Instance variables inherited from Axis: