Skip to content

CreateColorSeriesDemo

vtk-examples/Python/Visualization/CreateColorSeriesDemo

Description

This example demonstrates how to create a custom vtkColorSeries. The examples produces a vtkLookupTable explicitly. The vtkLookupTable is populated with colors from the vtkColorSeries using GetColorRepeating, since the size of the vtkLookupTable may be larger than the colors in the vtkColorSeries.

A vtkPlaneSource generates the geometry. The vtkCellData is populated with increasing integers starting at 1.

Ten different color series are generated from VTK color names in vtkNamedColors. The first argument of the example is one of "Blue", "Brown", "Red", "Orange", "White", "Grey", "Magenta", "Cyan", "Yellow" and "Green".

The colors are added from left to right, row by row, from the bottom left-hand corner of the table.

Other languages

See (Cxx)

Question

If you have a question about this example, please use the VTK Discourse Forum

Code

CreateColorSeriesDemo.py

#!/usr/bin/env python

# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import (
    vtkColorSeries,
    vtkNamedColors
)
from vtkmodules.vtkCommonCore import (
    vtkFloatArray,
    vtkLookupTable
)
from vtkmodules.vtkFiltersSources import vtkPlaneSource
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer
)


def get_program_parameters():
    import argparse
    description = 'how to create a custom vtkColorSeries.'
    epilogue = '''
A vtkLookupTable is explicitly produced, it is populated with colors from the vtkColorSeries
   using GetColorRepeating, since the size of the vtkLookupTable may be larger than the
   colors in the vtkColorSeries.

Ten different color series are generated from VTK color names in vtkNamedColors.
Choose from one of: Blue, Brown, Red, Orange, White, Grey, Magenta, Cyan, Yellow and Green.
    '''
    parser = argparse.ArgumentParser(description=description, epilog=epilogue,
                                     formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('seriesName', default='Red', nargs='?',
                        help='The name of the color series to use (default is Red).')
    args = parser.parse_args()
    return args.seriesName


def CreateLookupTableVTKBlue(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKBlueColors')

    myColors.AddColor(nc.GetColor3ub('alice_blue'))
    myColors.AddColor(nc.GetColor3ub('blue'))
    myColors.AddColor(nc.GetColor3ub('blue_light'))
    myColors.AddColor(nc.GetColor3ub('blue_medium'))
    myColors.AddColor(nc.GetColor3ub('cadet'))
    myColors.AddColor(nc.GetColor3ub('cobalt'))
    myColors.AddColor(nc.GetColor3ub('cornflower'))
    myColors.AddColor(nc.GetColor3ub('cerulean'))
    myColors.AddColor(nc.GetColor3ub('dodger_blue'))
    myColors.AddColor(nc.GetColor3ub('indigo'))
    myColors.AddColor(nc.GetColor3ub('manganese_blue'))
    myColors.AddColor(nc.GetColor3ub('midnight_blue'))
    myColors.AddColor(nc.GetColor3ub('navy'))
    myColors.AddColor(nc.GetColor3ub('peacock'))
    myColors.AddColor(nc.GetColor3ub('powder_blue'))
    myColors.AddColor(nc.GetColor3ub('royal_blue'))
    myColors.AddColor(nc.GetColor3ub('slate_blue'))
    myColors.AddColor(nc.GetColor3ub('slate_blue_dark'))
    myColors.AddColor(nc.GetColor3ub('slate_blue_light'))
    myColors.AddColor(nc.GetColor3ub('slate_blue_medium'))
    myColors.AddColor(nc.GetColor3ub('sky_blue'))
    myColors.AddColor(nc.GetColor3ub('sky_blue_deep'))
    myColors.AddColor(nc.GetColor3ub('sky_blue_light'))
    myColors.AddColor(nc.GetColor3ub('steel_blue'))
    myColors.AddColor(nc.GetColor3ub('steel_blue_light'))
    myColors.AddColor(nc.GetColor3ub('turquoise_blue'))
    myColors.AddColor(nc.GetColor3ub('ultramarine'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKBrown(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKBrownColors')

    myColors.AddColor(nc.GetColor3ub('beige'))
    myColors.AddColor(nc.GetColor3ub('brown'))
    myColors.AddColor(nc.GetColor3ub('brown_madder'))
    myColors.AddColor(nc.GetColor3ub('brown_ochre'))
    myColors.AddColor(nc.GetColor3ub('burlywood'))
    myColors.AddColor(nc.GetColor3ub('burnt_sienna'))
    myColors.AddColor(nc.GetColor3ub('burnt_umber'))
    myColors.AddColor(nc.GetColor3ub('chocolate'))
    myColors.AddColor(nc.GetColor3ub('deep_ochre'))
    myColors.AddColor(nc.GetColor3ub('flesh'))
    myColors.AddColor(nc.GetColor3ub('flesh_ochre'))
    myColors.AddColor(nc.GetColor3ub('gold_ochre'))
    myColors.AddColor(nc.GetColor3ub('greenish_umber'))
    myColors.AddColor(nc.GetColor3ub('khaki'))
    myColors.AddColor(nc.GetColor3ub('khaki_dark'))
    myColors.AddColor(nc.GetColor3ub('light_beige'))
    myColors.AddColor(nc.GetColor3ub('peru'))
    myColors.AddColor(nc.GetColor3ub('rosy_brown'))
    myColors.AddColor(nc.GetColor3ub('raw_sienna'))
    myColors.AddColor(nc.GetColor3ub('raw_umber'))
    myColors.AddColor(nc.GetColor3ub('sepia'))
    myColors.AddColor(nc.GetColor3ub('sienna'))
    myColors.AddColor(nc.GetColor3ub('saddle_brown'))
    myColors.AddColor(nc.GetColor3ub('sandy_brown'))
    myColors.AddColor(nc.GetColor3ub('tan'))
    myColors.AddColor(nc.GetColor3ub('van_dyke_brown'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKRed(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKRedColors')

    myColors.AddColor(nc.GetColor3ub('alizarin_crimson'))
    myColors.AddColor(nc.GetColor3ub('brick'))
    myColors.AddColor(nc.GetColor3ub('cadmium_red_deep'))
    myColors.AddColor(nc.GetColor3ub('coral'))
    myColors.AddColor(nc.GetColor3ub('coral_light'))
    myColors.AddColor(nc.GetColor3ub('deep_pink'))
    myColors.AddColor(nc.GetColor3ub('english_red'))
    myColors.AddColor(nc.GetColor3ub('firebrick'))
    myColors.AddColor(nc.GetColor3ub('geranium_lake'))
    myColors.AddColor(nc.GetColor3ub('hot_pink'))
    myColors.AddColor(nc.GetColor3ub('indian_red'))
    myColors.AddColor(nc.GetColor3ub('light_salmon'))
    myColors.AddColor(nc.GetColor3ub('madder_lake_deep'))
    myColors.AddColor(nc.GetColor3ub('maroon'))
    myColors.AddColor(nc.GetColor3ub('pink'))
    myColors.AddColor(nc.GetColor3ub('pink_light'))
    myColors.AddColor(nc.GetColor3ub('raspberry'))
    myColors.AddColor(nc.GetColor3ub('red'))
    myColors.AddColor(nc.GetColor3ub('rose_madder'))
    myColors.AddColor(nc.GetColor3ub('salmon'))
    myColors.AddColor(nc.GetColor3ub('tomato'))
    myColors.AddColor(nc.GetColor3ub('venetian_red'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKOrange(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKOrangeColors')

    myColors.AddColor(nc.GetColor3ub('cadmium_orange'))
    myColors.AddColor(nc.GetColor3ub('cadmium_red_light'))
    myColors.AddColor(nc.GetColor3ub('carrot'))
    myColors.AddColor(nc.GetColor3ub('dark_orange'))
    myColors.AddColor(nc.GetColor3ub('mars_orange'))
    myColors.AddColor(nc.GetColor3ub('mars_yellow'))
    myColors.AddColor(nc.GetColor3ub('orange'))
    myColors.AddColor(nc.GetColor3ub('orange_red'))
    myColors.AddColor(nc.GetColor3ub('yellow_ochre'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKWhite(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKWhiteColors')

    myColors.AddColor(nc.GetColor3ub('antique_white'))
    myColors.AddColor(nc.GetColor3ub('azure'))
    myColors.AddColor(nc.GetColor3ub('bisque'))
    myColors.AddColor(nc.GetColor3ub('blanched_almond'))
    myColors.AddColor(nc.GetColor3ub('cornsilk'))
    myColors.AddColor(nc.GetColor3ub('eggshell'))
    myColors.AddColor(nc.GetColor3ub('floral_white'))
    myColors.AddColor(nc.GetColor3ub('gainsboro'))
    myColors.AddColor(nc.GetColor3ub('ghost_white'))
    myColors.AddColor(nc.GetColor3ub('honeydew'))
    myColors.AddColor(nc.GetColor3ub('ivory'))
    myColors.AddColor(nc.GetColor3ub('lavender'))
    myColors.AddColor(nc.GetColor3ub('lavender_blush'))
    myColors.AddColor(nc.GetColor3ub('lemon_chiffon'))
    myColors.AddColor(nc.GetColor3ub('linen'))
    myColors.AddColor(nc.GetColor3ub('mint_cream'))
    myColors.AddColor(nc.GetColor3ub('misty_rose'))
    myColors.AddColor(nc.GetColor3ub('moccasin'))
    myColors.AddColor(nc.GetColor3ub('navajo_white'))
    myColors.AddColor(nc.GetColor3ub('old_lace'))
    myColors.AddColor(nc.GetColor3ub('papaya_whip'))
    myColors.AddColor(nc.GetColor3ub('peach_puff'))
    myColors.AddColor(nc.GetColor3ub('seashell'))
    myColors.AddColor(nc.GetColor3ub('snow'))
    myColors.AddColor(nc.GetColor3ub('thistle'))
    myColors.AddColor(nc.GetColor3ub('titanium_white'))
    myColors.AddColor(nc.GetColor3ub('wheat'))
    myColors.AddColor(nc.GetColor3ub('white'))
    myColors.AddColor(nc.GetColor3ub('white_smoke'))
    myColors.AddColor(nc.GetColor3ub('zinc_white'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKGrey(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKGreyColors')

    myColors.AddColor(nc.GetColor3ub('cold_grey'))
    myColors.AddColor(nc.GetColor3ub('dim_grey'))
    myColors.AddColor(nc.GetColor3ub('grey'))
    myColors.AddColor(nc.GetColor3ub('light_grey'))
    myColors.AddColor(nc.GetColor3ub('slate_grey'))
    myColors.AddColor(nc.GetColor3ub('slate_grey_dark'))
    myColors.AddColor(nc.GetColor3ub('slate_grey_light'))
    myColors.AddColor(nc.GetColor3ub('warm_grey'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKMagenta(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKMagentaColors')

    myColors.AddColor(nc.GetColor3ub('blue_violet'))
    myColors.AddColor(nc.GetColor3ub('cobalt_violet_deep'))
    myColors.AddColor(nc.GetColor3ub('magenta'))
    myColors.AddColor(nc.GetColor3ub('orchid'))
    myColors.AddColor(nc.GetColor3ub('orchid_dark'))
    myColors.AddColor(nc.GetColor3ub('orchid_medium'))
    myColors.AddColor(nc.GetColor3ub('permanent_red_violet'))
    myColors.AddColor(nc.GetColor3ub('plum'))
    myColors.AddColor(nc.GetColor3ub('purple'))
    myColors.AddColor(nc.GetColor3ub('purple_medium'))
    myColors.AddColor(nc.GetColor3ub('ultramarine_violet'))
    myColors.AddColor(nc.GetColor3ub('violet'))
    myColors.AddColor(nc.GetColor3ub('violet_dark'))
    myColors.AddColor(nc.GetColor3ub('violet_red'))
    myColors.AddColor(nc.GetColor3ub('violet_red_medium'))
    myColors.AddColor(nc.GetColor3ub('violet_red_pale'))
    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKCyan(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKCyanColors')

    myColors.AddColor(nc.GetColor3ub('aquamarine'))
    myColors.AddColor(nc.GetColor3ub('aquamarine_medium'))
    myColors.AddColor(nc.GetColor3ub('cyan'))
    myColors.AddColor(nc.GetColor3ub('cyan_white'))
    myColors.AddColor(nc.GetColor3ub('turquoise'))
    myColors.AddColor(nc.GetColor3ub('turquoise_dark'))
    myColors.AddColor(nc.GetColor3ub('turquoise_medium'))
    myColors.AddColor(nc.GetColor3ub('turquoise_pale'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKYellow(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKYellowColors')

    myColors.AddColor(nc.GetColor3ub('aureoline_yellow'))
    myColors.AddColor(nc.GetColor3ub('banana'))
    myColors.AddColor(nc.GetColor3ub('cadmium_lemon'))
    myColors.AddColor(nc.GetColor3ub('cadmium_yellow'))
    myColors.AddColor(nc.GetColor3ub('cadmium_yellow_light'))
    myColors.AddColor(nc.GetColor3ub('gold'))
    myColors.AddColor(nc.GetColor3ub('goldenrod'))
    myColors.AddColor(nc.GetColor3ub('goldenrod_dark'))
    myColors.AddColor(nc.GetColor3ub('goldenrod_light'))
    myColors.AddColor(nc.GetColor3ub('goldenrod_pale'))
    myColors.AddColor(nc.GetColor3ub('light_goldenrod'))
    myColors.AddColor(nc.GetColor3ub('melon'))
    myColors.AddColor(nc.GetColor3ub('naples_yellow_deep'))
    myColors.AddColor(nc.GetColor3ub('yellow'))
    myColors.AddColor(nc.GetColor3ub('yellow_light'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def CreateLookupTableVTKGreen(size):
    nc = vtkNamedColors()
    myColors = vtkColorSeries()
    myColors.SetColorSchemeByName('VTKGreenColors')

    myColors.AddColor(nc.GetColor3ub('chartreuse'))
    myColors.AddColor(nc.GetColor3ub('chrome_oxide_green'))
    myColors.AddColor(nc.GetColor3ub('cinnabar_green'))
    myColors.AddColor(nc.GetColor3ub('cobalt_green'))
    myColors.AddColor(nc.GetColor3ub('emerald_green'))
    myColors.AddColor(nc.GetColor3ub('forest_green'))
    myColors.AddColor(nc.GetColor3ub('green'))
    myColors.AddColor(nc.GetColor3ub('green_dark'))
    myColors.AddColor(nc.GetColor3ub('green_pale'))
    myColors.AddColor(nc.GetColor3ub('green_yellow'))
    myColors.AddColor(nc.GetColor3ub('lawn_green'))
    myColors.AddColor(nc.GetColor3ub('lime_green'))
    myColors.AddColor(nc.GetColor3ub('mint'))
    myColors.AddColor(nc.GetColor3ub('olive'))
    myColors.AddColor(nc.GetColor3ub('olive_drab'))
    myColors.AddColor(nc.GetColor3ub('olive_green_dark'))
    myColors.AddColor(nc.GetColor3ub('permanent_green'))
    myColors.AddColor(nc.GetColor3ub('sap_green'))
    myColors.AddColor(nc.GetColor3ub('sea_green'))
    myColors.AddColor(nc.GetColor3ub('sea_green_dark'))
    myColors.AddColor(nc.GetColor3ub('sea_green_medium'))
    myColors.AddColor(nc.GetColor3ub('sea_green_light'))
    myColors.AddColor(nc.GetColor3ub('spring_green'))
    myColors.AddColor(nc.GetColor3ub('spring_green_medium'))
    myColors.AddColor(nc.GetColor3ub('terre_verte'))
    myColors.AddColor(nc.GetColor3ub('viridian_light'))
    myColors.AddColor(nc.GetColor3ub('yellow_green'))

    numberOfColors = myColors.GetNumberOfColors()
    print('Number of colors:', numberOfColors)

    lut = vtkLookupTable()
    if size == 0:
        lut.SetNumberOfTableValues(numberOfColors)
    else:
        lut.SetNumberOfTableValues(size)
    lut.SetTableRange(0, lut.GetNumberOfTableValues())
    for i in range(lut.GetNumberOfTableValues()):
        color = myColors.GetColorRepeating(i)
        c = [color.GetRed(), color.GetGreen(), color.GetBlue(), 255]
        lut.SetTableValue(i, [x / 255.0 for x in c])
    return lut


def main():
    seriesName = get_program_parameters()
    seriesName = seriesName.capitalize()
    available_color_series = ['Blue', 'Brown', 'Red', 'Orange', 'White', 'Grey', 'Magenta', 'Cyan', 'Yellow', 'Green']
    if seriesName not in available_color_series:
        print('Available color maps are:', ", ".join(available_color_series))
        return

    colors = vtkNamedColors()

    # Provide some geometry.
    xResolution = 6
    yResolution = 6
    aPlane = vtkPlaneSource()
    aPlane.SetXResolution(xResolution)
    aPlane.SetYResolution(yResolution)
    size = xResolution * yResolution + 1

    # Create cell data.
    cellData = vtkFloatArray()
    for i in range(0, xResolution * yResolution):
        cellData.InsertNextValue(i)
    aPlane.Update()  # Force an update so we can set cell data.
    aPlane.GetOutput().GetCellData().SetScalars(cellData)

    # Get the lookup table.
    lut = eval('CreateLookupTableVTK' + seriesName + '(size)')

    # Set up the actor and mapper.
    mapper = vtkPolyDataMapper()
    mapper.SetLookupTable(lut)
    mapper.SetInputConnection(aPlane.GetOutputPort())
    mapper.SetScalarModeToUseCellData()
    mapper.SetScalarRange(0, size)

    actor = vtkActor()
    actor.SetMapper(mapper)
    actor.GetProperty().EdgeVisibilityOn()

    # Setup render window, renderer, and interactor.
    renderer = vtkRenderer()
    renderWindow = vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    renderWindow.SetWindowName('CreateColorSeriesDemo')

    renderWindowInteractor = vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)

    renderer.AddActor(actor)
    renderer.SetBackground(colors.GetColor3d('SlateGray'))
    renderWindow.Render()
    renderWindowInteractor.Start()


if __name__ == '__main__':
    main()