def plotStream(streamObj, graphFormat=None, xValue=None, yValue=None, zValue=None, **keywords): ''' Given a stream and any keyword configuration arguments, create and display a plot. Note: plots require matplotib to be installed. Plot methods can be specified as additional arguments or by keyword. Two keyword arguments can be given: `format` and `values`. If positional arguments are given, the first is taken as `format` and the rest are collected as `values`. If `format` is the class name, that class is collected. Additionally, every :class:`~music21.graph.PlotStream` subclass defines one `format` string and a list of `values` strings. The `format` parameter defines the type of Graph (e.g. scatter, histogram, colorGrid). The `values` list defines what values are graphed (e.g. quarterLength, pitch, pitchClass). If a user provides a `format` and one or more `values` strings, a plot with the corresponding profile, if found, will be generated. If not, the first Plot to match any of the defined specifiers will be created. In the case of :class:`~music21.graph.PlotWindowedAnalysis` subclasses, the :class:`~music21.analysis.discrete.DiscreteAnalysis` subclass :attr:`~music21.analysis.discrete.DiscreteAnalysis.indentifiers` list is added to the Plot's `values` list. Available plots include the following: * :class:`~music21.graph.plot.HistogramPitchSpace` * :class:`~music21.graph.plot.HistogramPitchClass` * :class:`~music21.graph.plot.HistogramQuarterLength` * :class:`~music21.graph.plot.ScatterPitchSpaceQuarterLength` * :class:`~music21.graph.plot.ScatterPitchClassQuarterLength` * :class:`~music21.graph.plot.ScatterPitchClassOffset` * :class:`~music21.graph.plot.ScatterPitchSpaceDynamicSymbol` * :class:`~music21.graph.plot.HorizontalBarPitchSpaceOffset` * :class:`~music21.graph.plot.HorizontalBarPitchClassOffset` * :class:`~music21.graph.plot.ScatterWeightedPitchSpaceQuarterLength` * :class:`~music21.graph.plot.ScatterWeightedPitchClassQuarterLength` * :class:`~music21.graph.plot.ScatterWeightedPitchSpaceDynamicSymbol` * :class:`~music21.graph.plot.Plot3DBarsPitchSpaceQuarterLength` * :class:`~music21.graph.plot.WindowedKey` * :class:`~music21.graph.plot.WindowedAmbitus` * :class:`~music21.graph.plot.Dolan` >>> s = corpus.parse('bach/bwv324.xml') #_DOCS_HIDE >>> s.plot('histogram', 'pitch', doneAction=None) #_DOCS_HIDE >>> #_DOCS_SHOW s = corpus.parse('bach/bwv57.8') >>> #_DOCS_SHOW s.plot('histogram', 'pitch') .. image:: images/HistogramPitchSpace.* :width: 600 >>> s = corpus.parse('bach/bwv324.xml') #_DOCS_HIDE >>> s.plot('pianoroll', doneAction=None) #_DOCS_HIDE >>> #_DOCS_SHOW s = corpus.parse('bach/bwv57.8') >>> #_DOCS_SHOW s.plot('pianoroll') .. image:: images/HorizontalBarPitchSpaceOffset.* :width: 600 ''' plotMake = findPlot.getPlotsToMake(graphFormat, xValue, yValue, zValue) #environLocal.printDebug(['plotClassName found', plotMake]) for plotInfo in plotMake: if not common.isIterable(plotInfo): plotClassName = plotInfo plotDict = None else: plotClassName, plotDict = plotInfo obj = plotClassName(streamObj, **keywords) if plotDict: for axisName, axisClass in plotDict.items(): attrName = 'axis' + axisName.upper() setattr(obj, attrName, axisClass(obj, axisName)) obj.run()
def plotStream( streamObj, graphFormat=None, xValue=None, yValue=None, zValue=None, **keywords, ): ''' Given a stream and any keyword configuration arguments, create and display a plot. Note: plots require matplotlib to be installed. Plot methods can be specified as additional arguments or by keyword. Two keyword arguments can be given: `format` and `values`. If positional arguments are given, the first is taken as `format` and the rest are collected as `values`. If `format` is the class name, that class is collected. Additionally, every :class:`~music21.graph.PlotStream` subclass defines one `format` string and a list of `values` strings. The `format` parameter defines the type of Graph (e.g. scatter, histogram, colorGrid). The `values` list defines what values are graphed (e.g. quarterLength, pitch, pitchClass). If a user provides a `format` and one or more `values` strings, a plot with the corresponding profile, if found, will be generated. If not, the first Plot to match any of the defined specifiers will be created. In the case of :class:`~music21.graph.PlotWindowedAnalysis` subclasses, the :class:`~music21.analysis.discrete.DiscreteAnalysis` subclass :attr:`~music21.analysis.discrete.DiscreteAnalysis.identifiers` list is added to the Plot's `values` list. Available plots include the following: * :class:`~music21.graph.plot.HistogramPitchSpace` * :class:`~music21.graph.plot.HistogramPitchClass` * :class:`~music21.graph.plot.HistogramQuarterLength` * :class:`~music21.graph.plot.ScatterPitchSpaceQuarterLength` * :class:`~music21.graph.plot.ScatterPitchClassQuarterLength` * :class:`~music21.graph.plot.ScatterPitchClassOffset` * :class:`~music21.graph.plot.ScatterPitchSpaceDynamicSymbol` * :class:`~music21.graph.plot.HorizontalBarPitchSpaceOffset` * :class:`~music21.graph.plot.HorizontalBarPitchClassOffset` * :class:`~music21.graph.plot.ScatterWeightedPitchSpaceQuarterLength` * :class:`~music21.graph.plot.ScatterWeightedPitchClassQuarterLength` * :class:`~music21.graph.plot.ScatterWeightedPitchSpaceDynamicSymbol` * :class:`~music21.graph.plot.Plot3DBarsPitchSpaceQuarterLength` * :class:`~music21.graph.plot.WindowedKey` * :class:`~music21.graph.plot.WindowedAmbitus` * :class:`~music21.graph.plot.Dolan` >>> s = corpus.parse('bach/bwv324.xml') #_DOCS_HIDE >>> thePlot = s.plot('histogram', 'pitch', doneAction=None) #_DOCS_HIDE >>> #_DOCS_SHOW s = corpus.parse('bach/bwv57.8') >>> #_DOCS_SHOW thePlot = s.plot('histogram', 'pitch') .. image:: images/HistogramPitchSpace.* :width: 600 >>> s = corpus.parse('bach/bwv324.xml') #_DOCS_HIDE >>> thePlot = s.plot('pianoroll', doneAction=None) #_DOCS_HIDE >>> #_DOCS_SHOW s = corpus.parse('bach/bwv57.8') >>> #_DOCS_SHOW thePlot = s.plot('pianoroll') .. image:: images/HorizontalBarPitchSpaceOffset.* :width: 600 ''' plotMake = findPlot.getPlotsToMake(graphFormat, xValue, yValue, zValue) # environLocal.printDebug(['plotClassName found', plotMake]) obj = None for plotInfo in plotMake: if not common.isIterable(plotInfo): plotClassName = plotInfo plotDict = None else: plotClassName, plotDict = plotInfo obj = plotClassName(streamObj, **keywords) if plotDict: for axisName, axisClass in plotDict.items(): attrName = 'axis' + axisName.upper() setattr(obj, attrName, axisClass(obj, axisName)) obj.run() if obj: return obj # just first one...